应用程序关闭时闹钟不工作

alarm not working when app is closed

当我使用模拟器时,闹钟工作正常。但是当我在实际设备上尝试时不工作。

应用程序打开时输出。

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}}

但是当我关闭应用程序时出现这个条目 removed.Why??这就是闹钟不响的原因。

警报接收器广播清单文件。

   <receiver android:name=".UpdateTables"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

请不要说使用服务并在那里注册接收器。我想我正在清单中注册接收器,它会起作用。并且还在模拟器中正常工作时发出警报。过去 3 天无法解决此问题。任何帮助都会有所帮助。

我也试过这些方法:

  1. 使用 wakefullBroadcastReceiver 而不是 BroadcastReceiver
  2. 使用 setAlarmclock 而不是 setExact。

大家也遇到了同样的问题。

如果您使用的是小米设备,那么您必须进行一些设置。 转到 Security/Permission/AutoStart/ 然后 select 您的应用并启用它。 希望有用。

执行 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();
}

你的问题没有得到正确解释,如果你正在设置一个具有该意图的警报管理器并且你的应用程序被强制停止设置: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_COMPLETED 这就是我的建议:

首先:在你的project properties中,Manifest Tab下,有一个checkbox list来选择你想要提供的权限,其中一个是RECEIVE_BOOT_COMPLETED.检查以提供这些权限。

其次:如果您的应用程序安装在外部存储(SD 卡)上,您将永远不会收到启动完成操作。所以你必须在清单标签中指定android:installLocation="internalOnly"。

Third :自版本 Android 3.1+ 如果用户从未启动过您的应用至少一次或用户 "force closed" 申请。这样做是为了防止恶意软件自动注册服务。此安全漏洞已在 Android.

的较新版本中关闭

Fourth:在您的设备上打开一个 adb shell 并强制这样的事件进行测试: am broadcast -a android.intent.action.BOOT_COMPLETED