Android学习笔记——静态注册实现开机启动遇到的问题与解决

广播组件学习中——无法接收开机广播

为了使程序在未启动的情况下就能接收到广播。动态注册的广播接收器无法实现这一功能(因为注册的逻辑是写在onCreate()方法中的),所以这里用静态注册实现开机启动

当程序接收到一条开机广播,当收到这条广播时就可以在onReceive()方法中执行相应的逻辑,从而实现开机启动的功能。

静态的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用。

而由于Android系统启动完成后会发出一条值为android.intent.action.BOOT_COMPLETED的广播,在标签里要添加相应的action。监听系统开机广播也需要声明权限。


<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  //权限声明

<intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>   //添加相应的action
            </intent-filter>

可是经过运行和重启后发现开机没有接收到广播

因为在Android studio3.4.1的程序是安装在sd卡上的,在android.intent.action.BOOT_COMPLETED的广播发送之后,sd卡才被挂载,所以广播接收器接收不到该广播。

解决办法:同时监听开机和sd卡挂载。(也不能只监听挂载就认为开机了,因为有的手机没有sd卡)

如下:

 <receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>   //监听开机
                <action android:name="android.intent.action.BOOT_COMPLETED"/>  
            </intent-filter>
            <intent-filter >   //监听sd卡挂载
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <data android:scheme="file">
                </data>
            </intent-filter>
        </receiver>

有的时候加上


<uses-permission android:name="android.permission.RESTART_PACKAGES" />  //权限声明(大多数的时候都不要就可以接收到广播了,我尝试时的这段代码上就有一条横线,去掉没有问题)

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值