gpt4 book ai didi

带有 BroadcastReceiver 内部类的 Android AlarmManager

转载 作者:行者123 更新时间:2023-11-30 02:57:23 24 4
gpt4 key购买 nike

我正在尝试使用内部 BroadcastReceiver 类实现 AlarmManager。这是我的内部类:

public class MyAlarm extends BroadcastReceiver 
{
@Override
public void onReceive(Context context, Intent intent) {

Toast.makeText(context, "alarm worked", Toast.LENGTH_SHORT).show();

}

public void setAlarm(Context context) {
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10000, pi);
}
}

因为它是一个内部类,我知道我必须动态注册接收者。在我的主要 Activity 中,我有以下代码:

    IntentFilter filter = new IntentFilter();
MyAlarm alarm = new MyAlarm();
alarm.setAlarm(this);
this.registerReceiver(alarm, filter);

闹钟没有为我响起。

最佳答案

据我所知,您不能将 LocalBroadcastReceiverAlarmManager 一起使用,因为使用 localBroadcast 数据不会离开应用程序,它在应用程序内工作进程(本地),警报管理器与不同的进程一起工作。

实际上挂起的 Intent 就是这里的“问题”:

The PendingIntent class provides a mechanism for creating intents that can be fired on your application's behalf by another application at a later time

正如您根据定义所见,pendingIntent 适用于不同的进程。这就是你不能让它与本地广播一起工作的原因。

您需要在 list 中注册接收器,正如@leesei 所说,您必须将内部类声明为static

关于带有 BroadcastReceiver 内部类的 Android AlarmManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23051460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com