私のアプリでは、 GPS の状態を監視する必要があります。アプリは GPS をオンにしてのみ実行する必要があり、ユーザーが GPS をオフにすると、「場所とセキュリティ」の設定が表示されます。GPS 監視用のカスタム クラスを実装しました。
public class GPSManager {
LocationManager mLocationManager;
StatusListener statusListener;
/**
* @param Context context - context to get LocationManager service
* @param IGpsStatusClient client -component, which wants to receive GPS status update
*/
public GPSManager(Context context, IGpsStatusClient client) {
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
statusListener=new StatusListener(client);
}
public boolean isGpsEnabled(){
return mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
public void registerUpdates() {
mLocationManager.addGpsStatusListener(statusListener);
}
public void unregisterUpdates() {
mLocationManager.removeGpsStatusListener(statusListener);
}
class StatusListener implements GpsStatus.Listener {
IGpsStatusClient client;
public StatusListener(IGpsStatusClient client){
this.client=client;
}
public void onGpsStatusChanged(int event) {
if(event==GpsStatus.GPS_EVENT_STOPPED){
client.promptGpsSettings();
}
}
}
}
ここでのクライアントは Fragment クラスのインスタンスです。IGpsStatusClient インターフェイスを実装し、1 つのメソッド (場所の設定を表示) を使用します。でアップデートを登録しonResume()
、登録を解除しますがonPause()
、これは効果がありません。通知バーを展開して GPS をオフにしてからアプリに戻ると、プロンプトが表示されません。私が理解しているように、GPS ステータス通知は、すべての受信者がそれを処理できるように、しばらくハングする「保留中の意図」のようなものではありません。オプションは何ですか?私が理解しているように、アクティビティが表示されている間ではなく、ユーザーのみが GPS をオフにすることができます。したがって、Activity (または Fragment) ライフサイクル イベントでのみ GPS ステータスを確認する必要があります。しかし、通知バーが展開されているとき、onResume() または onPause() 呼び出しを取得しません (しかし、なぜ GPS ステータス通知を受信しないのですか?) Service について考えていましたが、私の問題に対して高価だと思います。何か助けはありますか?ありがとう。