我正在尝试在 20 秒后广播并使用扩展接收器 ExtendedReceiver
接收广播。
这是我的函数,它创建一个警报并将 PendingIntent
设置为在 20 秒后关闭:
public void alert() {
GregorianCalendar cal = new GregorianCalendar();
cal.add(Calendar.SECOND, 20);
Intent i = new Intent(this, ExtendedReceiver.class);
int _uid = (int) System.currentTimeMillis();
PendingIntent pi = PendingIntent.getBroadcast(this, _uid, i, PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);
Log.i("Title", "Alarm has been set");
}
这是 ExtendedReceiver 类:
public class ExtendedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Title", "Broadcast received");
}
}
我收到第一条日志消息:Alarm has been set
但我没有收到第二条日志消息。我不确定问题出在哪里(Android 上的第一天)
最佳答案
如果可以的话,这就是我一直在做的事情。
改变你的
PendingIntent pi = PendingIntent.getBroadcast(this, _uid, i, PendingIntent.FLAG_ONE_SHOT);
到
PendingIntent pi = PendingIntent.getBroadcast(this, _uid, new Intent(EXTENDED_RECEIVER_ACTION), PendingIntent.FLAG_ONE_SHOT);
重要的是:像这样注册你的ExtendedReceiver
:
...
registerReceiver(new ExtendedReceiver() , new IntentFilter(EXTENDED_RECEIVER_ACTION));
PS:EXTENDED_RECEIVER_ACTION 是一个字符串,不要忘记取消注册您的接收器。
更多文档 here
希望对你有帮助:)
关于java - PendingIntent 和 AlarmManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26076841/