Android 即使设置报警的应用程序被关闭,如何使报警激活?

Android 即使设置报警的应用程序被关闭,如何使报警激活?,android,alarm,Android,Alarm,我对设置闹钟有点困惑。如果有人能提供反馈或一些提示,我们将不胜感激。总而言之,我的情况如下: 在我的应用程序中,我设置了一个警报: //////////////////////// // Set an alarm // Actually I set a unique id here. The hardcoded value is for simplicity only. int id = 123454321; Intent intent = new Intent(context, MyAla

我对设置闹钟有点困惑。如果有人能提供反馈或一些提示,我们将不胜感激。总而言之,我的情况如下:

在我的应用程序中,我设置了一个警报:

////////////////////////
// Set an alarm

// Actually I set a unique id here. The hardcoded value is for simplicity only.
int id = 123454321;

Intent intent = new Intent(context, MyAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, id, intent, 0);

long firstTime = SystemClock.elapsedRealtime();
firstTime += 10*1000;

AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 15*1000, sender);
////////////////////////

////////////////////////
// MyAlarm implementation
public class MyAlarm extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        // Do some periodic work here
    }
}
////////////////////////
当我设置闹钟时,一切都很好。当我使用命令时,我可以看到我的警报:

    adb shell dumpsys alarm
即使我的应用程序转到后台,我也能看到警报

接下来,我通过

设置-应用程序-管理应用程序-强制停止


当我重新发出命令“adb shell dumpsys alarm”时,我看到我的警报消失了。这让我想到,当我的应用程序进入后台,框架为了释放资源而杀死它时,我的警报也会被杀死。但是,我希望有一个独立于应用程序是否运行的报警。有人知道怎么做吗

我猜您的接收方对象尚未在清单中注册。如果您在清单文件中注册了receiver对象,那么即使您的应用程序未运行,系统也会找到它并调用。

我有一个应用程序,该应用程序会设置警报,然后消失

我使用的代码是:

舱单:

    <receiver android:name=".AlarmReceiver" android:process=":remote"></receiver>
设置(实际取消旧的并重置):

挂起的帐篷启动接收器,接收器快速工作,发送通知,然后离开。接收者不必发布通知。它可以有目的地开始一项活动,发送祝酒词等


我有一个接收器,可以在开机后恢复警报。(断电时警报确实会消失。)

是否考虑使用此服务?即使服务有可能被终止,您也可以对服务给予更高的优先级,这样您的服务被终止的可能性就最小了。是的,我也尝试过服务,但服务也被终止了。我在另一个平台上从Mark Murphy那里得到了关于这个问题的评论,他说手动停止这样的应用程序不会模拟操作系统的行为。谢谢你的提示,但是我在清单中注册了接收者。我在清单文件中有这一行。显然,在手动停止应用程序后,该应用程序启动的所有警报和服务也将被删除。谢谢您的回答。我试过了,但在设置-应用程序-管理应用程序-强制停止后,警报仍被删除强制停止将关闭所有内容。这是过去常被称为阿本德的东西。异常结束。当你通过设置强制停止时,你是在告诉Android操作系统该应用程序有一个大问题,你希望它被完全删除。你的应用程序有问题吗?如果没有,您需要使用finish()正常退出。PS:我错过了您在我第一次阅读时强制停止的事实。谢谢您的澄清。我试图模拟这样一种情况:框架杀死一个应用程序以释放资源。然而,正如它所显示的,“强制停止”并不模拟这种情况。您将有两个主要的例程(有更多的,但通常不需要)将被命中。暂停和暂停。您可以通过按Home键测试暂停。可以通过在主线中执行finish()来测试on-stop。例如,退出按钮。您可以使用log.d来跟踪并确保它们在模拟器中工作。设备上的临时toast消息。
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra("ALARM_MESSAGE", alarmMessage);
    PendingIntent receiverIntent =
        PendingIntent.getBroadcast(context,
        MyConstants.UPDATE_ALARM, intent,
        pendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    am.cancel(receiverIntent); // get rid of previous if unfired.
    am.set(AlarmManager.RTC_WAKEUP, calcTime.afterMidnight(), receiverIntent);