全志A40I Android7.1系统开机自启动

本文详细介绍了如何在全志A40I Android 7.1系统上实现应用开机自启动,涉及内核广播设置、AndroidManifest.xml权限添加、广播接收器创建及注意事项,适合Android开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        全志A40I Android7.1系统开机自启动,也适用于其他Android系统。Android系统的自启动不同于Linux系统,linux直接在内核init.rc中修改,应用层不用修改,而Android要在应用层中修改

1.在Android系统内核中首先应确保系统能够发送广播信号

在Android内核中frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java 查看

                 skipPackages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
             } else {
-                mBackgroundManagerService.resolverReceiver(intent, receivers);
+               if(!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())){
+                       mBackgroundManagerService.resolverReceiver(intent, receivers);
+               }
             }
             if (skipPackages != null && (skipPackages.length > 0)) {
                 for (String skipPackage : skipPackages) {

2.在AndroidManifest.xml中增加相关启动权限

<?xml version="1.0" encoding="utf-8"?>
<manifest
    .............
    <!-- 开机启动权限 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    .........
    <application
        .........
        <receiver
                android:name=".SysBootReceiver"
                android:enabled="true"
                android:exported="true"
                android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter android:priority="1000">
                <!--.接收启动完成的广播-->
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

3.创建一个广播接收类 

public class SysBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        LogV("action=" + action);
        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
            // 服务自启动
            Intent intent = new Intent(context, MainActivity.class);  // 要启动的Activity
            intent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }
}

若还是无法自启动,请检查:

a、应用安装到了sd卡内,安装在sd卡内的应用是收不到BOOT_COMPLETED广播

b、BOOT_COMPLETED对应的action和uses-permission没有一起添加

c、系统开启了Fast Boot模式,该模式下系统启动后不会发送BOOT_COMPLETED广播

d、应用程序安装后重来没有启动过,该情况下应用程序接收不到任何广播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等,请检查系统广播是否启动过相关限制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值