Android 开机向导(没有优先启动问题)

1.设置了开机向导的相关属性却没有优先启动

<activity android:name="DefaultActivity"
             android:excludeFromRecents="true"
             android:exported="true">
            <intent-filter android:priority="1">
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.HOME"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.SETUP_WIZARD"/>
            </intent-filter>
        </activity>

原因:开机向导应用如果不放在system_ext/priv-app/下,设置了“android:priority=1”也会被重置会0,如果使用源码编译,在Android.dp文件中设置“system_ext_specific: true”即可

2.每次重启重复进入开机向导问题

// 添加持久设置以允许其他应用程序知道设备已配置。
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
//这个标记位标识当前用户已经走完引导流程,如果不设置这个值,Home键、锁屏等将不可用
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);

// 从PackageManager中禁用该Activity。
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, DefaultActivity.class);
pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

走完开机向导流程后,设置相关标记位,并将该Activity禁用,最后finish自己进入launch界面(设置相关标记位可以让其他服务知道设备可用,如锁屏服务可用,启用Home键功能等,将该Activity禁用可以让下次开机时我们的应用不会再起来而直接启动桌面)

注:有些人用frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java类中重新设置默认启动的launch来规避此问题,并用全局变量来控制,此方法没有找到根本问题点,且规避产生的代码块使得整体逻辑更加复杂,不可取

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值