2

以下のコードを書きましたが、うまくいきません。誰でも私を助けることができますか?場所の変更を受動的に受信したいだけです。場所が変更されたシステムブロードキャストを取得するたびにアプリケーションをバックグラウンドで実行したいのですが、このコードではログが表示されません。

これが私のマニフェストです

<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=".LocationReceiver"
              android:enabled="true" >           
   <intent-filter>
        action android:name="android.location.PROVIDERS_CHANGED"               
        </intent-filter>
 </receiver>

ログが取得できない

     public class LocationReceiver extends BroadcastReceiver {
     public static final String PROVIDERS_CHANGED_ACTION="android.location.PROVIDERS_CHANGED";  

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    if (intent.getAction().equals(PROVIDERS_CHANGED_ACTION)) {
        Log.d("---------log--------", "Location Changed");
        myAction();

    }
}
4

1 に答える 1

2

ロケーションの更新を取得するには、まずロケーション リスナー インターフェイスを実装します。

public class LocationListeners implements LocationListener {

@Override
public void onLocationChanged(Location loc) {
    // TODO Auto-generated method stub
    Log.e("______", "location: " + loc.getTime() + " provider:" + loc.getProvider());
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub
    Log.e("_______", "disabled: " + provider);
}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
    Log.e("_______", "enable: " + provider);
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
    Log.e("________", "privider: " + provider + " status changed:" 
            + String.valueOf(status) + " extras: " 
            + extras.getInt("satellites"));

}

}

目的のプロバイダーを使用して、ロケーション マネージャーからロケーションの更新を受信するように登録します。あなたの場合、パッシブプロバイダー。

locListener = new LocationListeners();
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locListener);

デバイスが新しい更新場所を見つけるたびに、コールバックが返されます (サービスに登録して場所の更新を受信するため)。ロケーションが変更され、プロバイダーが変更され、ステータスが変更されると、リスナー インターフェイスの実装からのコールバック メソッドが呼び出されます。

于 2013-07-25T20:53:50.680 に答える