在开发中遇到这样一个问题,当我们写了开机自启后发现有的手机并不能很顺利的自启动,因为手机管家有最高权限,有个自启动管理,想直接调到这个页面把自己的app的自启动打开就可以,还有oppo,vivo,加入白名单,查了好多资料发现没有直接跳入自启动的界面的Intent, 我想到了可以通过手机的包名类名可以直接跳转,但是手机型号这么多,我怎么知道每个管家的包名类名是个啥,查资料发现 通过这个adb shell dumpsys activity top 命令可以捕捉到当前Activity的类名,手机型号太多,就抓了几个市场常用的手机!
这样他的类名包名就出来了,我是判断了手机型号,
private void selfStartManagerSettingIntent(Context context) {
String mtype = android. os. Build. MODEL;
Intent intent = new Intent();
intent. addFlags(Intent. FLAG_ACTIVITY_NEW_TASK);
ComponentName componentName = null ;
if (mtype. startsWith("Redmi" )|| mtype. startsWith("MI" )) {
componentName = new ComponentName("com.miui.securitycenter" , "com.miui.permcenter.autostart.AutoStartManagementActivity" );
} else if (mtype. startsWith("HUAWEI" )) {
componentName = new ComponentName("com.huawei.systemmanager" , "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity" );
} else if (mtype. startsWith("vivo" )) {
Log . e(TAG , "selfStartManagerSettingIntent: vivo" );
componentName = new ComponentName("com.iqoo.secure" , "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity" );
} else if (mtype. startsWith("ZTE" )) {
componentName = new ComponentName("com.zte.heartyservice" , "com.zte.heartyservice.autorun.AppAutoRunManager" );
} else if (mtype. startsWith("F" )) {
Log . e(TAG , "selfStartManagerSettingIntent: F" );
componentName = new ComponentName("com.gionee.softmanager" , "com.gionee.softmanager.oneclean.AutoStartMrgActivity" );
} else if (mtype. startsWith("oppo" )) {
componentName = new ComponentName("oppo com.coloros.oppoguardelf" , "com.coloros.powermanager.fuelgaue.PowerUsageModelActivity" );
}
intent. setComponent(componentName);
try {
context. startActivity(intent);
} catch (Exception e) {
}
}