静态广播实现app自启动

来源:互联网 发布:thinkphp5 nginx配置 编辑:程序博客网 时间:2024/05/16 15:30

android开机时会发送开机系统广播,通过对系统开机广播的监听可以简单实现app自启动功能


广播的选择

广播分静态广播和动态广播。两者区别静态通过mainfest清单文件注册,即使app未启动广播接收器也行之有效;动态广播大都通过代码中动态注册,随app生命周期存在。因为需要实现的是app开机自启功能,所以这里使用静态广播


BroadcastReceiver

首先是mainfest注册

<receiver android:name=".receiver.RebootBroadcastReceiver">            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.MEDIA_MOUNTED"/>                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>                <category android:name="android.intent.category.DEFAULT" />                <data android:scheme="file" />            </intent-filter>            <intent-filter>                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />                <action android:name="android.intent.action.USER_PRESENT" />            </intent-filter>        </receiver>
这里注意必须声明android.intent.action.BOOT_COMPLETED & android.intent.category.LAUNCHER,

BOOT_COMPLETED是receiver捕获特定广播的字段(此处为开机广播),

LAUNCHER是防止系统开机之后广播接收器不自启,receiver启动的必要标签。

其他的intent-filter见名知意,不必须

其次是广播的定义

public class RebootBroadcastReceiver extends BroadcastReceiver {    private static final String TAG = "RebootBroadcastReceiver";    @Override    public void onReceive(Context context, Intent intent) {        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){            try {                Log.e(TAG, "onReceive: 自启动成功!" );                Intent start = context.getPackageManager().getLaunchIntentForPackage("com.feiyu.jingyulive");                context.startActivity(start);            }catch (Exception e){                Log.e(TAG, "onReceive: 自启动失败!" );            }        }else {            Log.e(TAG, "onReceive: 自启动失败!" );        }    }}

onReceive内只有一段通过PackageManager自启应用的代码


需要注意

mainfest中加入自启动权限

<!--开机自启权限-->    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

有一些版本的安卓手机默认会关闭程序内置的自启动选项,在应用管理中找到应用的权限管理把允许系统启动和允许被第三方应用启动打开就好