2

以下のコードを書きましたが、うまくいきません。誰でも私を助けることができますか?積極的な問い合わせではなく、GPS ステータスの変化を受動的に受信したいだけです。電力を節約することが最も重要です。

メッセージ出力はありません。

package com.sharelbs.lbs.service;  
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class GPStStatusReceiver extends BroadcastReceiver {
  public static final String GPS_ENABLED_CHANGE_ACTION = "android.location.GPS_ENABLED_CHANGE";
  @Override
    public void onReceive(Context context, Intent intent) {
      Log.d("---------log--------","GPS Status onReceive");
      if(intent.getAction().equals(GPS_ENABLED_CHANGE_ACTION)){
        Log.d("---------log--------","GPS Status Changed");
        startMyProgram();
      }
    }
}

ここに私のManifest.xmlがあります:

<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<receiver android:name=".service.GPStStatusReceiver"> 
  <intent-filter> 
    <action android:name="android.location.GPS_ENABLED_CHANGE" /> 
  </intent-filter> 
</receiver>
4

1 に答える 1

8

マニフェストの間違った場所を指しているだけだと思います。受信者の名前を変更してください。

<receiver android:name=".GPStStatusReceiver">

このタイプの受信機は、GPSが有効になっているときはいつでもアプリを起動するのに最適ですが、アプリの実行中は、更新間隔が10日と1000マイルに設定されている場合でも、LocationListenerのonProviderEnabled()またはonProviderDisable()がこれらをキャッチします。もっと。したがって、requestLocationUpdates()メソッドに十分な設定を渡せば、必ずしもバッテリーの電力を浪費することはありません。

コメントからの追加

GPS_ENABLED_CHANGEロケーションリクエストをトリガーしていないため、受信していないと推測できます。[場所]メニューのチェックボックスをクリックしてGPS機能を有効にするだけでは、このインテントはブロードキャストされません。一部のアプリは現在の場所を要求する必要があります。また、このインテントに関する公式ドキュメントは見つかりませんでした。これは、Androidがいつでもこれを変更または削除する可能性があることを意味します。

公式にサポートされているLocationManager.PROVIDERS_CHANGED_ACTIONが必要な場合は、GPSプロバイダー(および他のプロバイダー)が有効/無効になっているときにインテントをブロードキャストします。

<action android:name="android.location.PROVIDERS_CHANGED" />
于 2012-07-09T16:04:54.810 に答える