私はcwac-Location Poller(here)を使用して、ユーザーの場所を常にポーリングし、場所に基づく通知を表示しています。これはすべて正常に動作していますが、別のBroadcastReceiver
を添付しようとしています。そのため、アプリケーションがフォアグラウンドになっている場合、通知を現在のユーザーの場所にアニメーション表示する代わりに表示します。しかし何らかの理由で私はそれを働かせることはできません。私はポーラーを開始するには次のコードしているMapActivity
のLocationPollerと複数のブロードキャストレシーバー
onCreate()
方法:onResume()
方法で
@Override
public void onCreate(Bundle savedInstanceState) {
.....
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, LocationPoller.class);
Bundle bundle = new Bundle();
LocationPollerParameter parameter = new LocationPollerParameter(bundle);
parameter.setIntentToBroadcastOnCompletion(new Intent(this, LocationReceiver.class));
parameter.setProviders(new String[] {LocationManager.GPS_PROVIDER, LocationManager.NETWORK_PROVIDER});
parameter.setTimeout(60000);
i.putExtras(bundle);
pendingIntent = PendingIntent.getBroadcast(this, 0, i, 0);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), PERIOD, pendingIntent);
}
を私はregisterReceiver()
メソッドを使用して別の受信機を登録しています:
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter(com.commonsware.cwac.locpoll.LocationPollerParameter.INTENT_TO_BROADCAST_ON_COMPLETION_KEY);
intentFilter.setPriority(1);
registerReceiver(locationReceiver, intentFilter);
}
:
private BroadcastReceiver locationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "mapActivity called");
abortBroadcast();
}
};
私は
sendOrderedBroadcast
代わりの
sendBroadcast
public void onLocationChanged(Location location) {
handler.removeCallbacks(onTimeout);
Intent toBroadcast = createIntentToBroadcastOnCompletion();
toBroadcast.putExtra(LocationPollerResult.LOCATION_KEY, location);
sendOrderedBroadcast(toBroadcast, null);
quit();
}
を使用するようにLocationPollerService
を変更した複数の受信機にブロードキャスト注文210
して送信するためには、今、問題が呼ばれることはありません飽きない私の動的に登録受信機であるが、AndroidManifest.xmlをで述べた一つが行います。
<receiver android:name=".receiver.LocationReceiver" />
<receiver android:name="com.commonsware.cwac.locpoll.LocationPoller" />
<service android:name="com.commonsware.cwac.locpoll.LocationPollerService" />
以下は、私がcreateIntentToBroadcastOnCompletion(){return new intent(locationPollerParameter.getIntentToBroadcastOnCompletion())で持っているものです。 } getIntentToBroadcastOnCompletion()は、 "com.commonsware.cwac.locpoll.EXTRA_INTENT"と同じ文字列を返します。 – Waqas
@Waqas:次に、 "com.commonsware.cwac.locpoll.EXTRA_INTENT"は 'com.commonswareと同じではありません.cwac.locpoll.LocationPollerParameter.INTENT_TO_BROADCAST_ON_COMPLETION_KEY'。 – CommonsWare
あなたの素早い返信に感謝します.com.commonsware.cwac.locpoll.LocationPollerParameter.INTENT_TO_BROADCAST_ON_COM PLETION_KEYは値com.commonsware.cwac.locpoll.EXTRA_INTENTを持つ静的な文字列です。 – Waqas