【问题标题】:PendingIntent.getBroadcats don't find an IntentPendingIntent.getBroadcats 找不到 Intent
【发布时间】:2014-06-01 12:05:21
【问题描述】:

我正在编写一个包含多个警报的应用程序,并且我希望可以选择取消它们。我正在使用 AlarmManager 和 PendingIntent。我的问题是,当我想取消警报时,getBroadcast 找不到符合条件的 PendingIntent。

private void turnOnMorningRemider()
    {
        long time = System.currentTimeMillis() + 60 * 45;

        Intent tmpIntent = new Intent(this, AlarmPopUpDialog.class);

        tmpIntent.putExtra(getString(R.string.alarm_time_of_day), AlarmPopUpDialog.REQUEST_CODE_MORNING);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addNextIntent(tmpIntent);

        // Gets a PendingIntent containing the entire back stack
        morningPendingIntent = stackBuilder.getPendingIntent(AlarmPopUpDialog.REQUEST_CODE_MORNING, PendingIntent.FLAG_ONE_SHOT);


        //set the alarm for particular time
        alarmManager.set(AlarmManager.RTC_WAKEUP, time, morningPendingIntent);

        Toast.makeText(this, "Alarm is on.", Toast.LENGTH_LONG).show();
    }

取消闹钟我使用:

private void turnOffMorningReminder()
{
    Intent tmpIntent = new Intent(this, AlarmPopUpDialog.class);

    PendingIntent pi = PendingIntent.getBroadcast(this, AlarmPopUpDialog.REQUEST_CODE_MORNING,
            tmpIntent, PendingIntent.FLAG_NO_CREATE);

    if  (pi != null)
    {
        alarmManager.cancel(pi);
        Toast.makeText(this, "Alarm is off.", Toast.LENGTH_LONG).show();
    }
}

pi 变量始终为空,因此警报开始响起。

下一个问题是,当我尝试使用 getBroadcast(而不是堆栈构建器)创建 PendingIntent 时,我的警报永远不会激活。

morningPendingIntent = PendingIntent.getBroadcast(this, AlarmPopUpDialog.REQUEST_CODE_MORNING, tmpIntent, PendingIntent.FLAG_UPDATE_CURRENT);

使用堆栈构建器是我找不到意图的原因吗?

【问题讨论】:

    标签: android android-intent android-pendingintent android-alarms


    【解决方案1】:

    我觉得自己很愚蠢。我的问题是我的 AlarmPopUpDialog 扩展了 Activity 而不是 BroadcastReceiver 类。当我在中间添加一个扩展 BroadcastReceiver 的类时,一切都开始工作了。

    morningPendingIntent = PendingIntent.getBroadcast(this, AlarmBrodcastReceiver.REQUEST_CODE_MORNING, tmpIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    

    public class AlarmBroadcastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
    
            Intent i = new Intent(context, AlarmPopUpDialog.class );
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtras(intent);
            context.startActivity(i);
    
        }
    }
    

    我希望这个答案能帮助下一个可怜的家伙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2014-04-23
      • 1970-01-01
      • 2022-11-29
      • 2015-06-09
      相关资源
      最近更新 更多