2011-02-17 21 views
5

Bir GPS sensörü mevcutsa ve etkinleştirilmişse, ancak geri dönülmez veya kapatılmışsa yanlış döndüren bir yöntem yazıyorum. Zaten zorlu olduğu için ...GPS sensörünün varlığı nasıl kontrol edilir?

hasSystemFeature("FEATURE_LOCATION_GPS") // on PackageManager 

Aygıtın GPS'i olup olmadığını yanlış döndürür. Yani bir tane olan ve açık olan bir cihazda bile, yine de yanlış döner. Bana tamamen yanlış görünüyor, ama nedenini göremiyorum. Hatta hiç bir GPS donanımına sahip Burada var bir cihazda gerçek

isProviderEnabled("gps") // on LocationManager 

İade. Bu da tamamen karşı sezgisel görünüyor.

ben SDK sezgisel, ya da belki ben test ediyorum cihazlar garip davranıyor bile değil, ben bir şey eksik çünkü bu sonuçlar olabilir kabul ediyoruz.

Neyi eksik?

cevap

13

Çalışması gerekir. Bu çağrıyı yaptığınızda, günlükte herhangi bir hata mesajı var mı? FEATURE_LOCATION_GPS sabit bir referans olduğunu ve bir dize çünkü

PackageManager pm = getPackageManager(); 
boolean hasGps = pm.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS); 
+0

Hata, ama hepsi (Advent Vega 10" non-Google tarafından onaylanmış tablete) bir GPS sahip olmayan bir cihazda gerçek döndürür. Belki tablet sorumlu olduğu ve işletim sistemi yanlış üzerine kurulur –

+1

Cihaz geliştiricisinin SDK PackageManager'ın soyut olmasından bu yana bir PackageManager sınıfı uygulaması gerekir. Cihaz geliştiricisinin ilk kez bir şey yapması bu olmaz. –

+0

Bunu Kinde Fire'da (GPS olmadan) test ettim ve bir çekicilik. (Google’ın onaylamayan çıtırlarını desteklemeye değmez galiba) –

1

Sizin hasSystemFeature() muhtemelen her zaman false döndürür. Şu anki dize literalinin aslında "android.hardware.location.gps" olduğuna inanıyorum.

LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    //Ask the user to enable GPS 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Location Manager"); 
    builder.setMessage("Would you like to enable GPS?"); 
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      //Launch settings, allowing user to make a change 
      Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(i); 
     } 
    }); 
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      //No location service, no Activity 
      finish(); 
     } 
    }); 
    builder.create().show(); 
} 

ben onları GPS'i etkinleştirmek için doğrudan Konum ayarları sayfaya alabilir işaret etmek AlertDialog hakkında ekstra ekledi:

ben aradığınız şeye inanacak böyle bir şeydir Settings.ACTION_LOCATION_SOURCE_SETTINGS Amaç eylemini kullanarak.

Bu yardımcı olur umarım! Cihaz GPS donanımını aşağıdaki yoktur durumda

+0

Evet, elbette, dizinin statik sabit yoluyla gelmesi gerekiyor .. Sabit olarak sadece API8 ve ileride olduğu için API5'i hedefliyorum. Ama ben sabit olarak bir dize olarak el ekledim ve işe yarıyor.Ben tüm senaryolarda çalışmayabilir bekledim, ama sadece olası bir UI geliştirmek için bir test Bazıları için başarısız olursa bir bi anlaşma değil, bilemezler. Teşekkürler. –

+1

Çok erken konuştum. hasSystemFeature ("android.hardware.location.gps"), hem GPS hem de cihazsız cihaz için geçerli olarak döner. Bu kadar basit bir şeyin ne kadar sinir bozucu olduğunu kanıtlıyor. isProviderEnabled (Location.Cihazda GPS olmadığında bile GPS_PROVIDER) hala doğrudur. –

+0

Test ettiğiniz iki cihaz nelerdir? Ayrıca, eğer LocationManager.getAllProviders() 'ın, eğer desteklenmiyorsa, GPS listesinde bulunup bulunmadığını kontrol etmenin başka bir yolu olacaksa, iade listesinde“ LocationProvider.GPS_PROVIDER ”bulunmayacağına da işaret edebilirim. – Devunwired

2

doğrudur: Benim durumumda

LocationManager locationManager = (LocationManager) AppCore.context().getSystemService(Context.LOCATION_SERVICE); 

* hasSystemFeature (PackageManager.FEATURE_LOCATION_GPS) * gerçek bile cihazı döner

locationManager.getProvider(LocationManager.GPS_PROVIDER) == null; 

GPS yok. Yani güvenilir değil.

İlgili konular