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/

相关文章:

使用正则表达式解析字符串时的 Java 8 lambda 表达式回调类型

java - 这是合适的定制同步器吗?

android - 从 Android 通过 USB 控制中继

android - 在 ListView 上滑动项目,垂直边距小

android - Intent Action SEND 总是打开 GMail

android - 在YouTube Android应用中打开YouTube链接

java - 如何在android中使用opencv访问轮廓区域内的像素并写回原始图像

java - Java 中的链接错误

android - 支持 MapFragment 而不是 MapFragment

android - 应用程序内附加的 PDF 文件但不使用 android Intent 发送