7

w Android OS, w „Ustawieniach” -> „Usługi lokalizacyjne”, znajduje się przycisk przełączania nazwie „Dostęp do mojej lokalizacji”, które mogą być wykorzystane wyłączyć & włączyć dostęp do informacji o lokalizacji z aplikacji.Słuchaj lokalizacji dostępu włączyć/wyłączyć w ustawieniach

Obecnie rozwijam aplikację usług lokalizacyjnych. Zastanawiam się, jak mogę słuchać tego ustawienia w moim projekcie Android? Czy istnieje odbiornik, którego mogę używać od razu, gdy użytkownik wyłączy lub włączy "Dostęp do mojej lokalizacji"?

Jeśli nie ma dla niego odbiornika, jak mogę odsłuchać tę zmianę w moim projekcie Android?

+1

@ GrlsHu, nie, nie chcę tego robić. Kluczową kwestią mojego pytania jest słuchanie tego ustawienia dostępu do lokalizacji. – Mellon

+0

http://stackoverflow.com/a/20673766/1994950 i http://stackoverflow.com/a/23756293/1994950 pomoże – Kushal

Odpowiedz

0

można użyć poniższy kod, aby sprawdzić, czy Położenie usługi Włącz lub nie

LocationManager lm = null; 
boolean gps_enabled,network_enabled; 
    if(lm==null) 
     lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    try{ 
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    }catch(Exception ex){} 
    try{ 
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    }catch(Exception ex){} 

    if(!gps_enabled && !network_enabled){ 
     dialog = new AlertDialog.Builder(context); 
     dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled)); 
     dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
       context.startActivity(myIntent); 
       //get gps 
      } 
     }); 
     dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     dialog.show(); 

    } 
+2

Witam, moje pytanie nie dotyczy tego, jak sprawdzić wartość, ale o tym, jak słuchać zmiana, czyli jak otrzymać powiadomienie w kodzie, który użytkownik zmienił ten dostęp do lokalizacji w ustawieniach, a następnie uzyskać zmienioną wartość. – Mellon

+0

@GrIsHu To jest nieprawidłowe. Czy wypróbowałeś rozwiązanie firmy usman poniżej? –

5

Działa to dla mnie:

Dodaj odbiornik do pliku manifestu:

<receiver 
     android:name="com.eegeo.location.LocationProviderChangedReceiver"> 
     <intent-filter> 
      <action android:name="android.location.PROVIDERS_CHANGED" /> 
     </intent-filter> 
    </receiver> 

sprawdzić zarówno dostawcy lokalizacji w odbiorniku:

public class LocationProviderChangedReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     boolean anyLocationProv = false; 
     LocationManager locationManager = (LocationManager) MyMainActivity.context.getSystemService(Context.LOCATION_SERVICE); 

     anyLocationProv |= locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     anyLocationProv |= locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     Log.i("", "Location service status" + anyLocationProv); 


    } 

} 

Chociaż ten odbiornik jest wywoływany więcej niż jeden raz z oczywistych powodów, ale to wskaże ci status.

+1

Odbiornik manifestu transmisji powinien być używany tylko wtedy, gdy aplikacja potrzebuje lokalizacji w tle. W przeciwnym razie powinien używać odbiornika transmisji środowiska wykonawczego –

1

Możesz to zrobić znacznie prostszy w ten sposób. W swojej BroadcastReceiver za onReceive() metoda:

ContentResolver contentResolver = getContext().getContentResolver(); 
    // Find out what the settings say about which providers are enabled 
    int mode = Settings.Secure.getInt(
      contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 

    if (mode == Settings.Secure.LOCATION_MODE_OFF) { 
     // Location is turned OFF! 
    } else { 
     // Location is turned ON! 
    } 

~ Dzięki tym kodem: LocationManagerTest.java

Powiązane problemy