2011-05-17 17 views
11

Düz ve basit. Bir Etkinlik başlatıyorum ve telefonun GPS modülünün etkin olup olmadığını kontrol ediyorum. Etkin değilse, kullanıcıyı bir iletişim kutusuyla sorar ve el ile etkinleştirmek isteyip istemediğini sorar. Açık Evet, Konum Ayarları'nı etkinleştiririm. Artık kullanıcı istediği takdirde etkinleştirebilir, ancak ne yaptığını kontrol etmem gerekiyor. o kodda benim mantığı ile devam etmek için geri geldiğindeİstenirse kullanıcının GPS özelliğini etkinleştirip etkinleştirmediğini kontrol edin

try { 
    isGPSEnabled = locationManager 
      .isProviderEnabled(LocationManager.GPS_PROVIDER); 
} catch (Exception ex) {} 
if (isGPSEnabled) { 
    locationManager.requestLocationUpdates(
      LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps); 
} else { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage(
      "Your GPS module is disabled. Would you like to enable it ?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", 
        new DialogInterface.OnClickListener() { 

         public void onClick(DialogInterface dialog, 
           int id) { 
          // Sent user to GPS settings screen 
          final ComponentName toLaunch = new ComponentName(
            "com.android.settings", 
            "com.android.settings.SecuritySettings"); 
          final Intent intent = new Intent(
            Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
          intent.addCategory(Intent.CATEGORY_LAUNCHER); 
          intent.setComponent(toLaunch); 
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          startActivityForResult(intent, 1); 
          dialog.dismiss(); 
         } 
        }) 
      .setNegativeButton("No", 
        new DialogInterface.OnClickListener() { 

         public void onClick(DialogInterface dialog, 
           int id) { 
          dialog.cancel(); 
         } 
        }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

Ben, kullanıcı Konum ayarlarında seçtiğini bilmek gerekir. Temel olarak kullanıcının bir seçim yapmasını ve etkinliğime dönmesini ve ayrıca gps modülünün durumunu tekrar kontrol etmesini beklemem gerekiyor.

cevap

19

Neden onActivityResult() yönteminizle LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) yöntemini kontrol edin. Kullanıcı döndüğünde, bu yöntem çağrılmalıdır çünkü startActivityForResult(). Kullanıcı GPS'i etkinleştirdiyse, isProviderEnabled() şimdi farklı bir sonuç döndürmelidir.

Alternatif olarak, her zaman onResume yönteminizde GPS denetimi yapın. Kullanıcı Konum ayarlarından geri dönüyorsa ve GPS özelliğini etkinleştirmemişse, GPS etkin olana kadar aynı mesajı alacaklardır.

Yoksa bir şey mi özlüyorum?

+0

Yukarıda yazdığım kod ile, onActivityResults, Ayarlar amacının başlatılmasından hemen sonra patlar ... böylece kullanıcının işlemlerini yapmasını beklemez. Garip davranışlar ama ben hata ayıklayıcı ile izledim. – Alin

+0

Ayarlar amacına merakla: \t startActivityForResult (yeni Intent (android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0); onActivityResult tetiğini doğru şekilde yapın – Alin

+0

Belki de ihtiyacınız olan davranışı engelleyen FLAG_ACTIVITY_NEW_TASK idi. –

İlgili konular