我知道已经有几百个这样的问题被问到了,但是我已经检查了一段时间,仍然没有找到任何解决办法。
我看到this answer to "Android BOOT_COMPLETED not received when application is closed"说BOOT_COMPLETED
不会发送到应用程序,除非用户先启动你的应用程序,在Android版本3.1之后,但我仍然看到一些应用程序正在这样做,所以一定有一个方法。我真的需要处理它,否则我也反对做一些没有用户交互的事情。
以下是我的Android清单:
<manifest ... >
<!-- to be activated service on boot is completed -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application ... >
<!-- to receive data when boot completed -->
<receiver
android:name="myPackage.BootReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
**编辑:**在我的广播接收机中没有太多东西可看,但这里需要的是:
package myPackage
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Utils.LogI("BootReceiver", "BootReceiver received!");
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
// Do my stuff
}
}
}
9条答案
按热度按时间3ks5zfa01#
下面的东西对我很有效
hxzsmxv22#
这是一个古老而基本的问题,但许多Android开发人员现在仍然对这个问题感到困惑,因为他们没有花时间仔细阅读文档
我看到有人分享了一些链接,并说:“这行不通了”,这完全是错误的和误解。
关于这个问题:* “我看到的回答是,在Android版本3.1之后,除非用户先启动应用程序,否则 Boot _COMPLETED不会发送到应用程序”*,请阅读以下几行(来自官方文档:https://developer.android.com/about/versions/android-3.1.html#launchcontrols)才能正确理解:
1.这意味着用户应在安装后启动应用至少一次以激活应用,然后应用可以正常接收来自操作系统的隐式广播。(仅启动一次!)
1. “是否有任何应用程序安装后从未打开甚至只打开过一次?",是的,这是垃圾邮件和诈骗应用程序,这种技术可以帮助用户防止这种情况!
此外,直到现在(Android Oreo 8.0),当Android限制在Manifest(https://developer.android.com/about/versions/oreo/background.html#broadcasts)上注册隐式广播时,一些广播目前仍不受这些限制。** Boot _COMPLETED是他们提到的第一个**!*(https://developer.android.com/guide/components/broadcast-exceptions.html)
最后,请仔细阅读文档并三思而后行:3!
mutmk8jj3#
一些新的平板电脑和安卓设备默认有一个安全应用程序。有时这些应用程序会阻止您的自动启动模式。MyAsus管理器就是一个安全应用程序的例子。在这种情况下,用户需要在应用程序管理器中为所有希望接收此 Boot _COMPLETED的应用程序添加“允许自动启动
gblwokeq4#
***对于HTC设备***添加
com.htc.intent.action.QUICKBOOT_POWERON
2w2cym1i5#
对于像我一样仍然有这个问题的其他人,如果您在有 Boot 锁(pin、pattern或其他)的设备上调试,OS版本〉= 7.0需要订阅
android.intent.action.LOCKED_BOOT_COMPLETED
,如下所示:您可以在以下链接中找到该文档:https://developer.android.com/training/articles/direct-boot
f45qwnt86#
问题出在设备上。某些设备只允许内部应用程序接收此操作(例如:安卓5.1)。
您可以将此添加到Intent过滤器中作为解决方法
动作
android:name="android.intent.action.USER_PRESENT"
这在用户解锁设备后触发。
nqwrtyyt7#
我遇到的问题是
BOOT_COMPLETED
和QUICKBOOT_POWERON
一起并不总是触发我的意图,当我从我的Android 6.0.1面板关闭电源时。我已经在互联网上搜索了相当长的时间,并通过添加QUICKBOOT_POWEROFF
到清单文件找到了解决方案。另见:
HTC's "fast boot" is not broadcasting BOOT_COMPLETED intent nor wiping intents from alarm manager
b1zrtrql8#
如果您找到了这个答案,而其他答案似乎都不起作用,请仔细检查清单中的操作字符串。如果您在
action
标签中写入了错误的字符串,AndroidStudio不会显示任何错误。不要将代码中常量的名称(ACTION_BOOT_COMPLETED
)与所述常量的value(清单中的常量)混淆,并且等于android.intent.action.BOOT_COMPLETED
TL;DR检查清单中是否包含以下内容:
而不是这个:
txu3uszq9#
要解决此问题,您需要创建NotificationListener服务
如果设备是〉= Build.VERSION_CODES.JELLY_BEAN_MR2,并且有一个电池优化选项,如华为设备,那么你必须请求NotificationListener权限,并创建一个NotificationListener服务,如下面的代码所示,然后你将在你的接收器中获得 Boot _COMPLETED
清单接收人:
1创建通知监听器服务:
2检查是否授予NotificationListener:
3如果没有,则请求NotificationListener权限: