Jestem na systemie Android 2.3.7 i staram się napisać BroadcastReceiver, który zostanie wywołany, gdy użytkownik włącza GPS/off (tj. przez dotknięcie "Użyj satelitów GPS" w opcjachAndroid: wykrywanie, kiedy GPS jest włączony/wyłączony (lub gdy żadna aplikacja już go nie używa)
Co zrobiłem do tej pory to:
1) Utworzono następujące broadcastReceiver:
public class GPSStatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "Broadcast received!", Toast.LENGTH_SHORT).show();
}
}
2) Dodano to do manifestu systemu Android, wewnątrz tagów:
<receiver android:name=".GPSStatusBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
Problem polega na tym, że wydaje się nie być niezawodny. Kiedy włączam GPS on/ff, metoda onReceive() działa tylko czasami (powiedziałbym 1 raz na 3), gdy nie jest wywoływana.
Chcę wiedzieć, czy istnieje niezawodny sposób wykrywania, kiedy GPS jest wyłączony/włączony.
Jeśli nie, dobrze byłoby być powiadamianym przynajmniej wtedy, gdy żadna aplikacja nie korzysta z GPS anymoer (np. Gdy ikona GPS znika z paska stanu, wskazując, że nikt nie aktywnie lokalizuje).
EDYCJA: Wyjaśnienie: Nie chcę tego robić, gdy moja aplikacja jest uruchomiona. Po prostu włączam i wyłączam moją aplikację, gdy gps jest włączony/wyłączony, wykonaj jego czynności, a następnie zakończ, nie chcę subskrybować lokalizacji. Aktualizacje ...
Niestety, moje pytanie nie było wystarczająco jasne. Nie chcę wykrywać lokalizacji w mojej aplikacji. Chcę tylko wykryć, kiedy system GPS jest włączony/wyłączony przez system użytkownika. (Moja aplikacja będzie tylko tym odbiornikiem, który po prostu zapisze dane na dysku za każdym razem, gdy GPS zostanie włączony/wyłączony) –
@Master_T tak, jeśli 'OnStatusChanged' jest wyzwalane, jeśli status się zmienił. Status oczywiście zmienia się, gdy użytkownik włącza/wyłącza go. – poitroae
Ale czy to działa, czy moja aplikacja nie jest aktywna? A przynajmniej działa w tle? Chcę, aby moja aplikacja była wywoływana za każdym razem, gdy GPS jest włączony/wyłączony, zrób to, a następnie zakończ. Właśnie dlatego używałem BroadcasReceiver, ponieważ powiadamia aplikacje, nawet jeśli nie są uruchomione. –