传递给挂起的intent时,static方法中的intent为null

时间:2015-02-04 10:35:54

标签: android android-service android-pendingintent

我目前几乎完成了一个我正在处理的应用,除了新的障碍。

我的应用程序包含一个按预期触发的服务警报,其中的意图在他们设置的确切时间工作,其他一切正常。但是,我的应用程序有菜单按钮,可让您打开和关闭它。它在IntentService中调用此方法来检查它是否应显示为"打开警报"或"关闭警报",具体取决于返回的布尔值。用户的选择(他们想要打开或关闭)也保存在共享的首选项中,这也可以正确地保存我的日志语句告诉我的内容。问题是当设备重置时,应用程序中的所有内容都能正常工作,保存首选项,除非在首次运行应用程序时重置后此方法返回false,因此菜单项无法正确更新。

在重置时,菜单按钮显示"打开闹钟",即使它实际上已经打开,因为下面的方法返回false。如果我单击一次,警报将关闭,但文本不会更改,但按钮正在工作。如果我再次单击它,则下一次按照预期更改"关闭警报",警报重新开启,然后按预期工作。下面是有问题的方法,在调试时会告诉我,当我创建的意图中的所有内容在传递到PendingIntent时都是null,但我无法弄清楚原因。

public static boolean isServiceAlarmOn(Context context)
    {
        Intent i = new Intent(context.getApplicationContext(), CommuteCheckAlarmService.class);
        PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_NO_CREATE);
        Log.i(ALARM_SERVICE, "Checking isServiceAlarmOn, pi is NOT null is " + (pi != null) + "and the intent is not null" + (i != null));
        return pi != null;
    }

是否有人知道在设备重置时导致此行为的原因是什么?我在模拟器上运行它,关闭闹钟的首选项也能正确保存。

更新:当我通过Run As Android应用程序在模拟器上运行我的应用程序而不是仅仅打开模拟设备并像普通用户那样在设备中启动应用程序时,就会发生令人困惑的行为。有人知道为什么上述行为在Run as Android Application期间特别发生了吗?

1 个答案:

答案 0 :(得分:1)

当设备重新启动或您的应用程序被卸载时,其所有PendingIntent和警报都将被删除。这是正常行为。