16

私はAndroid2.3.7を使用しており、ユーザーがGPSのオン/オフを切り替えたときに呼び出されるBroadcastReceiverを作成しようとしています(つまり、オプションの[GPS衛星を使用]をタップします)。

私がこれまでに行ったことはこれです:

1)次のbroadcastReceiverを作成しました。

public class GPSStatusBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Toast.makeText(arg0, "Broadcast received!", Toast.LENGTH_SHORT).show();

    }
}

2)これをAndroidマニフェストのタグ内に追加しました:

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

これに関する問題は、信頼できないように見えることです。GPSをオン/オフにすると、onReceive()メソッドはたまにしか実行されません(1回のタイムアウト3と言います)。それ以外の場合は呼び出されません。

GPSがオフ/オンになったことを検出する信頼できる方法があるかどうか知りたいです。

そうでない場合は、少なくともGPSを使用しているアプリがない場合(つまり、gpsアイコンがステータスバーから消えて、誰もアクティブに位置を特定していないことを示す場合)に通知されると便利です。

編集:明確化:アプリの実行中にこれを実行したくありません。gpsがオン/オフになったときにアプリを起動し、その処理を実行してから終了します。LocationsUpdatesをサブスクライブしたくありません...

4

4 に答える 4

9

APIレベル9以降では、以下を使用できますLocationManager.PROVIDERS_CHANGED_ACTION

構成されたロケーションプロバイダーが変更されたときのブロードキャストインテントアクション。で使用しisProviderEnabled(String)ます。を操作している場合は、代わりLOCATION_MODE APIにを使用してください。MODE_CHANGED_ACTION

定数値: "android.location.PROVIDERS_CHANGED"

ソース

于 2014-02-12T05:30:23.540 に答える
3

次の解決策は奇妙な解決策かもしれませんが、解決策が見つからない場合は試すことができます。ソリューションのもう1つの問題は、APIレベル9の後でのみ機能することです。

スレッドまたはサービスでは、を使用して非常に短い間隔で定期的にgpsステータスを確認できます。

 LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
 boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

許可を使用します

android.permission.ACCESS_FINE_LOCATION

私はこれに答えていますが、私にとっては良い解決策ではないはずです。また、最小期間間隔の遅延の可能性があります。ただのオプション。

于 2013-03-16T17:42:15.010 に答える
2

API 19以降、インテントアクションをリッスンできますLocationManager.MODE_CHANGED_ACTION

次のようにして、現在地モードを取得することもできます。

try
{
    int locationMode = android.provider.Settings.Secure.getInt(context.getContentResolver(), android.provider.Settings.Secure.LOCATION_MODE);
} catch (android.provider.Settings.SettingNotFoundException e)
{
    e.printStackTrace();
}

返される値は、次のいずれかである必要があります。

android.provider.Settings.Secure.LOCATION_MODE_BATTERY_SAVING
android.provider.Settings.Secure.LOCATION_MODE_HIGH_ACCURACY
android.provider.Settings.Secure.LOCATION_MODE_OFF
android.provider.Settings.Secure.LOCATION_MODE_SENSORS_ONLY
于 2016-09-13T14:09:53.317 に答える
-3

LocationListenerとオーバーライドを使用しますOnStatusChanged

requestLocationUpdates(String, long, float, LocationListener)インスタンスのメソッドを使用してリスナーをアタッチできLocationManagerます。

于 2013-03-16T17:06:13.753 に答える