使用模拟器时,报警工作正常。但当我在实际设备上尝试时无法工作。
应用程序打开时输出。
RTC #8: Alarm{2c1fc9e type 1 when 1486492260454 user.com.hlthee}
tag=*alarm*:user.com.hlthee/.UpdateTables
type=1 whenElapsed=+22h43m2s644ms when=2017-02-08 00:01:00
window=-1 repeatInterval=86400000 count=0
operation=PendingIntent{7c4e37f: PendingIntentRecord{3f5fbf4c user.com.hlthee broadcastIntent}}
但当我关闭应用程序时,这个条目被删除了。为什么?这就是为什么警报没有响起的原因。
报警接收器广播程序清单文件。
<receiver android:name=".UpdateTables"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
请不要说使用服务并在那里注册接收器。我想我正在清单中注册接收器,它会起作用。并在模拟器中正常工作时发出警报。从过去3天起无法解决此问题。任何帮助都是有益的。
我也尝试过这些方法:
- 使用wakefullBroadcastReceiver而不是BroadcastReceive
- 使用setAlarmclock而不是setExact
任何人也面临同样的问题。
如果您在MI设备上工作,则必须进行一些设置。转到安全性/权限/AutoStart/然后选择您的应用程序并启用它。希望它能起作用
您的问题没有得到正确的解释,如果您正在设置具有该意图的报警管理器,并且您的应用程序被强制停止,请设置:FLAG_INCLUDE_stopped_PACKAGES作为您意图中的标志。。。If set, this intent will always match any components in packages that are currently stopped. This is the default behavior when FLAG_EXCLUDE_STOPPED_PACKAGES is not set. If both of these flags are set, this one wins (it allows overriding of exclude for places where the framework may automatically set the exclude flag).
如果你的问题是你没有收到BOOT_COMPLETE,这是我的建议:
第一个:在项目属性的"清单"选项卡下,有一个复选框列表,用于选择要提供的权限,其中一个是RECEIVE_BOOT_COMPLETED。选中以提供这些权限。
秒:如果您的应用程序安装在外部存储(SD卡)上,您将永远不会收到引导完成操作。因此,您必须在manifest标记中指定android:installLocation="internalOnly"。
第三:自Android 3.1+版本以来,如果用户从未启动过您的应用程序至少一次或用户"强制关闭"了应用程序,则您不会收到BOOT_COMPLETE。这样做是为了防止恶意软件自动注册服务。这个安全漏洞在较新版本的安卓系统中被堵住了。
第四个:在您的设备上打开adb外壳,强制测试如下事件:am broadcast -a android.intent.action.BOOT_COMPLETED
执行onTaskRemoved和onDestroy
@Override
public void onTaskRemoved(Intent rootIntent) {
//Set what to do when task is removed
super.onTaskRemoved(rootIntent);
}
@Override
public void onDestroy() {
//What to do when service i destroyed
super.onDestroy();
}