Pertanyaan GPS Android mendapatkan lokasi saat ini


Saya mengembangkan aplikasi Android sederhana dan dalam aplikasi sederhana ini saya ingin mendapatkan data GPS Latitued dan Longitued, itu bekerja dengan benar di emulator saya tetapi ketika saya menginstal pada perangkat Android nyata itu tidak bekerja. Tolong bantu saya untuk memecahkan masalah ini dan ikuti adalah kode saya. Terima kasih sebelumnya

public class getLocation extends AppCompatActivity {

private Button btnGetLocation;
private TextView textGPS;
private LocationManager locationManager;
private LocationListener locationListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_get_location);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    btnGetLocation = (Button) findViewById(R.id.btnGetLocation);
    textGPS = (TextView) findViewById(R.id.textViewGps);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            textGPS.setText("lat: "+location.getLatitude()+" long: "+location.getLongitude());

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {
            startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));

        }
    };

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.INTERNET
            },10);
            return;
        }
    }else{
        configureButton();
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    switch (requestCode){
        case 10:
            if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                configureButton();
            return;
    }
}

private void configureButton() {

    btnGetLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            locationManager.requestLocationUpdates("gps", 0, 0, locationListener);
        }
    });
}

}

Cuplikan layar dari emulator: enter image description here

Cuplikan layar dari seluler: enter image description here


5
2018-04-09 06:32


asal


Jawaban:


Anda hanya meminta GPS ... Perangkat Anda perlu melakukan kontak dengan satelit! Di ruang hampa! Jalan keluar dan ujilah! Ini adalah masalah umum ketika menguji kode yang hanya menggunakan GPS, itu tidak bekerja dengan baik di dalam ruangan.

Juga, Anda tidak harus menggunakan "gps" hard coded, Anda harus menggunakan:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

Seperti menggunakan FusedLocationProviderAPI, Anda akan kehilangan beberapa akurasi, tetapi ia menawarkan kinerja baterai yang jauh lebih baik, karena sangat bergantung pada Lokasi Jaringan, dan hanya menggunakan GPS jika benar-benar diperlukan. Untuk contoh lengkap tentang cara menggunakannya, lihat di sini: https://stackoverflow.com/a/30255219/4409409


4
2018-04-09 07:40



tambahkan ke kode Anda ini. ketika aplikasi ini berjalan di dalam ruangan mengembalikan lokasi terakhir yang diketahui.

        // Get the location from the given provider
        Location location = locationManager
                .getLastKnownLocation(provider);

        locationManager.requestLocationUpdates(provider, 1000, 1, this);

2
2018-04-09 08:32



Itu API lokasi layanan Google Play lebih disukai daripada API lokasi kerangka Android (android.location) sebagai cara menambahkan kesadaran lokasi ke aplikasi Anda.

Anda dapat menemukan contoh bagaimana menggunakannya dengan benar sini.

P.S. Jangan lupa untuk memeriksa apakah izin diberikan pada perangkat Anda.


1
2018-04-09 06:56