3

私のアプリでは、 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 について考えていましたが、私の問題に対して高価だと思います。何か助けはありますか?ありがとう。

4

1 に答える 1

4

/メソッドを実装LocationListenerして使用してみましたか?onProviderDisabledonProviderEnabled

これは、Android開発者ページへのリンクですLocationListener

于 2011-10-18T14:25:29.217 に答える