【问题标题】:Android: My broadcast receiver for alarm manager isn't workingAndroid:我的警报管理器广播接收器不工作
【发布时间】:2017-06-18 22:39:09
【问题描述】:

我希望我的警报管理器设置为特定时间以更改手机背景,但广播接收器没有做任何事情。你能帮忙告诉我为什么吗?

定时报警:

public void scheduleAlarm(Context context){
    Intent intent = new Intent(context, AlarmReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 18);
    calendar.set(Calendar.MINUTE, 34);
    am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    am.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent );
    Toast.makeText(context, "Alarm set", Toast.LENGTH_LONG).show();
}

广播接收器:

@Override
    public void onReceive(Context context, Intent intent){
        PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        GrilledCheeseLookup.getGrilledCheeseJSON(grilledCheeseUrls, context);
        Toast.makeText(context, "Alarm worked", Toast.LENGTH_LONG).show();
    }

在清单中启用:

<receiver android:name=".AlarmReceiver" android:enabled="true" />

【问题讨论】:

  • 你在清单中的正确位置有&lt;receiver&gt; 元素吗?即,在&lt;application&gt; 标签之间,但不在其他任何东西之内,比如&lt;activity&gt;?您确定 name 属性指向正确的类,在正确的包中吗?假设您使用Toast 来确定接收器是否正在运行,您确定onReceive() 中的某些内容在显示之前没有失败吗?
  • 是的,它在应用程序标签内,但在任何其他标签(如 )之外。我在任何包中都没有 AlarmReceiver,所以应该没问题。而且我确信它在显示之前不会失败。
  • www.github.com/Akash14204 .. 项目学生预算跟踪器。我用过。你可以从那里取代码
  • 您是否正在稍等片刻,让它有机会第一次开火?您是否在警报响起之前以某种方式强制停止应用程序?
  • 是的,我在后台等待了一段时间。该应用程序是否必须处于活动状态才能正常工作?我举杯表示闹钟已设置。

标签: android broadcastreceiver alarmmanager android-pendingintent


【解决方案1】:

尝试使用 Intent/4 构造函数创建您的 Intent,同时指定 packageContext(您可以将 uri 设置为 null)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多