2016-04-09 20 views
5

Basit bir Android uygulaması geliştirdim ve bu basit uygulamada, GPS Latitued ve Longitued verilerini almak istiyorum, emülatörümde doğru çalışıyor ancak gerçek Android cihazına kurduğumda çalışmaz. Lütfen bu sorunu çözmek için bana yardım edin ve takip benim kodumdur. Mobil gelen enter image description hereAndroid GPS şu anki konumuna ulaşın

Ekran atış: emülatörü gelen Şimdiden teşekkürler

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); 
     } 
    }); 
} 

} 

ekran görüntüsü enter image description here

+1

Yalnızca GPS istiyorsunuz ... Cihazınızın uydularla iletişim kurması gerekiyor! Dışarı çık ve test et! Ayrıca, "gps" sabit kodlu kullanmamalısınız, "locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locationListener) kullanmalısınız;" –

+0

Dışarıda yürüdüğüm için teşekkürler. –

cevap

4

Sadece GPS istiyorsunuz ... Cihazınızın uydularla iletişim kurması gerekiyor! Boşlukta! Dışarı çık ve test et! Bu yalnızca GPS kullanan bir kodun test edilmesinde yaygın bir sorundur ve içeride çok iyi çalışmaz.

FusedLocationProviderAPI kullanarak gelince
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

, bazı doğruluğunu kaybeder, ama beri çok gelişmiş pil performansı sunuyor:

Ayrıca, "gps" sert kodlu kullanmamalısınız, kullanmak gerekir Ağ Konumuna büyük ölçüde bağlıdır ve sadece gerekli ise GPS kullanır. Bunun nasıl kullanılacağı hakkında tam bir örnek için, buraya bakın: https://stackoverflow.com/a/30255219/4409409

+0

İyi çalışıyor, ancak kaydetmek istediğimde Latitued ve Longitued veritabanına bunları alamıyorum. –

+0

@GulMuhammadAkbari Ayrıca, genellikle bir Konum daha hızlı (Ağ kapsama alanında WiFi ağları olduğunda) veren Ağ konumu da talep etmelisiniz. Alt satırda, bir veritabanını veritabanına kaydetmeden önce bir Konum elde edene kadar beklemeniz gerekir, böylece 'onLocationChanged() 'geriçağırımında Konumları aldığınızda veritabanına kaydedin. –

1

Google Play services location APIs bir yolu olarak Android çerçeve konum API'leri (android.location) tercih edilir uygulamanıza konum farkındalığı ekleme.

Sen ne kadar haklı here.

Dip not kullanmak için örnek bulabilirsiniz Cihazınızda izin verilip verilmediğini kontrol etmeyi unutmayın.

2

kodunuza ekleyin. Bu uygulama kapalı dönüş en son bilinen konumda çalıştığında.

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

     locationManager.requestLocationUpdates(provider, 1000, 1, this); 
İlgili konular