java - PendingIntent 和 AlarmManager

标签 java android android-intent android-alarms

我正在尝试在 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/

相关文章:

android - FinalizerReference导致的Service Binder内存泄露

java - Firebase Android 机器学习套件 : Way to hide display values on QR code

java - 调用 objadapter.removeItem(po);仅当列表被删除时

java - Android:从另一个 Activity 设置 TextView 的文本不起作用

Java 方法参数不适用

JavaFX - MVC 应用程序与数据库的最佳实践

java - 如何从 jframe 打开 jdialog

java - 使用 JPA 保存 Oracle XMLType 类型列

Android - 当应用程序被杀死以回收资源时是否有系统广播 Intent ?

java - Android 中如何将用户输入从一个 Activity 传递到另一个 Activity