美文网首页
Android 为什么无法监听到开机广播了?

Android 为什么无法监听到开机广播了?

作者: SunnyGL | 来源:发表于2019-06-25 09:05 被阅读0次

如果你的项目需要监听到开机广播,以此实现开机自启等类似功能,你到网上搜索一下,基本上都是搜到以下实现方法。

1.创建一个BroadcastReceiver,在BroadcastReceiver的onReceive方法中添加启动相应Activity的代码。
public class BootUpReceiver extends BroadcastReceiver {

    public BootUpReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (TextUtils.equals(intent.getAction(), "android.intent.action.BOOT_COMPLETED")) {
            Intent intentMain = new Intent(context, MainActivity.class);
            intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intentMain);
        }
    }
}
2.在AndroidMainfest中注册该广播接收器。
<receiver
       android:name=".receiver.BootUpReceiver"
       android:enabled="true"
       android:exported="true">
       <intent-filter android:priority="1000">
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
</receiver>

亲测以上方法在我的一加5(Android 9)上是不管用的,其他博主给出的在第2步添加对SD卡加载完成等事件的广播监听方法,也是没有任何效果,一直不太明白网上大家都给出的一致方法,为啥就没效果了,难道是Android在后来的系统版本中,对这一块做了改动?直到前段时间看到了《Android开发艺术探索》中关于广播的发送和接受过程的一段讲解,终于解开了我的疑惑,原文摘抄如下:

在Android 3.1之后, 为Intent添加了两个标记位,分别是FLAG_INCLUDE_STOPPED_PACKAGES和
FLAG_EXCLUDE_STOPPED_PACKAGES,用来控制广播是否要对处于停止状态的应用 起作用,它们的含义
如下所示。

FLAG_INCLUDE_STOPPED_PACKAGES
表示包含已经停止的应用,这个时候广播会发送给已经停止的应用。

FLAG_EXCLUDE_STOPPED_PACKAGES
表示不包含已经停止的应用,这个时候广播不会发送给已经停止的应用。

从Android 3.1开始,系统为所有广播默认添加了 FLAG_EXCLUDE_STOPPED_PACKAGES标志,这样做是
为了防止广播无意间或者在不必要的时候调起已经停止运行的应用。

如果的确需要调起未启动的应用,那么只需要为广播的Intent添加
FLAG_INCLUDE_STOPPED_PACKAGES标记即可。

当FLAG_EXCLUDE_STOPPED_PACKAGES和FLAG_INCLUDE_STOPPED_PACKAGES两种标记位共存时,
以FLAG_INCLUDE_STOPPED_PACKAGES为准。这里需要补充一下,一个应用处于停止状态分为两种情形:
第一种是应用安装后未运行,第二种是应用被 手动或者其他应用强停了。Android 3.1中广播的这个特
性同样会影响开机广播,从 Android 3.1开始,处于停止状态的应用同样无法接收到开机广播,而在
Android 3.1之前, 处于停止状态的应用是可以收到开机广播的。

通过上面这段话,我们可以知道,如果想让广播能够发送到未启动的应用,必须为广播的Intent添加FLAG_INCLUDE_STOPPED_PACKAGES标记,但是开机广播是系统发出的,我们无法修改。综上所述,自Android3.1之后,App开机自启无法实现。

相关文章

  • Android 为什么无法监听到开机广播了?

    如果你的项目需要监听到开机广播,以此实现开机自启等类似功能,你到网上搜索一下,基本上都是搜到以下实现方法。 1.创...

  • Android 开机自启动 App

    Android 设备开机自启动的可以用广播实现,因为 Android 设备开机时会发送一条开机广播 "androi...

  • Android App 开机自启动

    Android 设备开机自启动的可以用广播实现,因为 Android 设备开机时会发送一条开机广播 "androi...

  • 无法收到开机广播

    国内第三方厂商对自启动做了一些限制,比如小米要在安全中心-->授权管理--自启动管理里添加三星要在智能管理器里面添...

  • Android广播机制

    广播分为标准广播 和 有序广播一、标准广播 三、系统广播Android内置很多系统级别广播,如手机开机后发一条广播...

  • Android静态广播多action冲突

    最近有个需求,开机自启,应用安装后自启,需要监听广播 问题:应用可以收到app覆盖的广播,无法收到开机广播修改: ...

  • 接收开机广播缓慢

    Android接收开机广播 注册广播 可通过动态注册,但如果需要开机去做一件事,则必须静态注册 添加权限 这种接收...

  • # 羊皮书APP(Android版)开发系列(二十六)开机自启动

    开机自动启动app的实现是比较简单的,监听一个开机广播即可。当监听到开机广播后打开想要启动的app即可,具体实现如...

  • Broadcast广播的基本使用

    全局广播:在整个Android系统中应用不但可以接受自己的广播,也可以接受别的应用的广播,或则系统的广播(开机广播...

  • Android 实现程序开机自启动

    Android 设置程序开机自启动 编写一个广播类 代码如下: 在manifests中注册这个广播 在manife...

网友评论

      本文标题:Android 为什么无法监听到开机广播了?

      本文链接:https://www.haomeiwen.com/subject/nymzqctx.html