У меня есть следующий код, чтобы отправить намерение:Как заставить Android BroadcastReceiver работать с AlarmManager?
alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("myLog");
intent.putExtra("message", new Date().toString());
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME,System.currentTimeMillis()+1000,5000,alarmIntent);
И следующий приемник:
public class myReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
// Extract data included in the Intent
String message = intent.getStringExtra("message");
logText.setText(logText.getText()+"\n"+message);
}
}
private BroadcastReceiver mMessageReceiver = new myReceiver();
Почему мои mMessageReceiver
пожаров только один раз с sendBroadcast
, но не получает намерения транслируемых моего alarmMgr
?
EDIT: Кроме того, это соответствующая часть моего AndroidManifest.xml
файла:
<receiver android:name=".MainApp$myReceiver" >
<intent-filter>
<action android:name="com.example.*.*" />
</intent-filter>
</receiver>
EDIT 2: Подробнее:
@Override public void onResume() {
super.onResume();
// Register mMessageReceiver to receive messages.
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction("myLog");
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
myIntentFilter);
}
Это отменяет MainActivitie
s onResume()
.
Да, я видел аналогичный код. Эта ссылка: http://stackoverflow.com/questions/4660823/android-alarm-not-working очень хорошо объясняет. Когда я копирую пасту, этот код работает, но я просто пытаюсь понять, что я делаю неправильно. – cozkul
может быть из-за этой строки 'Intent intent = new Intent (« myLog »);' Your stuffing the intent с String, когда вы должны наполнить его активностью, с которой вы ее запускаете, и получателем, с которым вы хотите получить его. Например: «Intent myIntent = new Intent (MainActivity.this, AlarmReceiver.class);' – Daedalus
Нет. Я уверен, что это жизнеспособно. Эта строка называется «Действие», и вы должны иметь возможность настроить приемник вещания для прослушивания определенных действий. В edit2 вы можете это увидеть. Но да, возможно, я не устанавливаю registerReceiver правильно ... – cozkul