当前位置: 首页 > 知识库问答 >
问题:

悬垂物。getBroadcats没有找到目的

皇甫伟彦
2023-03-14

我正在编写一个包含多个警报的应用程序,我想有一个选项来取消它们。我正在使用AlarmManager和PendingIntent。我的问题是,当我想取消警报时,getBroadcast找不到符合条件的挂起内容。

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(而不是stack builder)创建PendingIntent时,我的警报从未激活。

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

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

共有1个答案

易焱
2023-03-14

我觉得自己很笨。我的问题是AlarmPopUpDialog扩展的活动不是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);

    }
}

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

 类似资料:
  • 我正在使用安装在本地主机上的wordpress构建一个站点。 出于某种原因,我的post.php页面没有显示帖子缩略图(特色图片)。我已经确定,这是一个问题,timthumb.php这是不正确的定位图像网址。我在网上搜索了几个小时,尝试了许多解决方案,但似乎没有任何效果。 基本问题是我在blog.php文件中的这一行: My functions.php脚本将get_image_url定义如下: 在

  • 所以我检查了gradlew是否在项目目录下,但我找不到它。但我仍然可以运行任务从‘分级项目’窗口。 怎么了?

  • 我正在导入Apache Commons Math和Lemmingapex Trilateration作为处理中的外部jar库。我遵循SO的指示: 如何在处理中添加外部库 处理草图似乎工作正常,但每次运行草图时,我都会将以下错误打印到控制台。 这是处理PDE草图: 我哪里错了?有什么建议吗?

  • 有没有办法解决/抑制错误“在将项目导入 Eclipse 时找不到处理 swagger-codegen-maven-plugin:3.0.23:generate in Eclipse 的市场条目”? 我的pom中的swagger-codegen.xml如下所示, 我看了这个问题并回答了如何解决Spring Data Maven Builds的“生命周期配置未涵盖的插件执行”,但我没有父子pom文件,

  • 问题内容: 我正在使用gradlew进行Java项目。我使用Ubuntu Linux作为操作系统。当我运行“ gradle”时,它将运行并提供信息。但是,当我运行“ gradlew”时,其输出为“未找到命令’gradlew’,您的意思是:软件包’gradle’(universe)gradlew中的命令’gradle’:未找到命令” 我做了研究,有了jdk,并且做了sudo apt-get inst