开机默认此app作为launcher首次加载 ,就是设置这个apk为开机向导,并没有设置这个成默认launcher,若此应用是launcher应用那么按返回之后会提示让你选择哪一laucher前提是此应用内置并没有作为launcher应用,就可以用下面的方法。
开机自启,开机自动启动某个指定应用!!!!
方法一:(推荐)但是这个比较慢,开机已经进入系统了但是还有过好一会才会收到广播,它需要完成系统更新之后才接受到
vendor/mediatek/proprietary/packages/apps/SystemUI/ src/com/android/systemui/SystemUIApplication.java
在接受到开机广播的地方,执行跳转,这里是广播接受跳转,可以直接显式启动
IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
registerReceiver(new BroadcastReceiver() {
下面增加执行操作
一:可以直接显式启动
Intent cIntent=new Intent();
cIntent.setClassName("lte.trunk.tapp","lte.trunk.tapp.settings.AASSettingActivity");
cIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
android.util.Log.d("yantao", "cIntent="+cIntent);
context.startActivity(cIntent);
二:用PackageManager().getLaunchIntentForPackage方法,可以不用传类名,适合不晓得具体那个activity先出来,只需要有一个包名就可以
Intent cIntent=new Intent();
cIntent = context.getPackageManager().getLaunchIntentForPackage("lte.trunk.tapp");
android.util.Log.d("yantao", "cIntent="+cIntent);
if(cIntent != null){
cIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(cIntent);
} else {
android.util.Log.d("yantao", "getLaunchIntentForPackage failed");
}
O版本!o以上不起作用
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
在Home Activity 在上面的ActivityManagerService开启之后,会调用finishBooting()函数
在这个finishBooting中最后加入如下,这样可以开机指定应用直接进入这个应用,哪怕它是个launcher应用。就这一次首次加载,前面的判断可以不加
if (Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) != 1) {
+ Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
+ Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
+ }
+ Intent cIntent=new Intent();
+ cIntent = mContext.getPackageManager().getLaunchIntentForPackage("com.mcptt");
+ if(cIntent != null){
+ mContext.startActivity(cIntent);
+ } else {
+ android.util.Log.i("yantao", "getLaunchIntentForPackage failed" );+ }
+ //*/
上面就是设置这个apk为开机向导,ActivityManagerService中,由于开机向导只在系统第一次启动之前启动,所以开机向导关闭的时候需要将自己设置为不在启动。源码里finishBooting里面有句mAnrManager.writeEvent(AnrManager.EVENT_BOOT_COMPLETED);就是设置不再启动了。然后同时需要告诉系统开机向导已经完成了,需要写入如下属性到系统中(需要系统权限)
Settings.Global.putInt(getActivity().getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
然后在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java里面修改别人写的按下电源键后锁死在launcher3了,判断如下,在case KeyEvent.KEYCODE_POWER: {这个case下 ,
else{
- if(getCurrentActivityName(mContext).equals("com.android.launcher3.Launcher")) {
- if (down) {
- interceptPowerKeyDown(event, interactive);
- } else {
- interceptPowerKeyUp(event, interactive, canceled);
- }
- }else{
- if (down) {
- Intent intent=new Intent();
- intent.setClassName("com.android.launcher3","com.android.launcher3.Launcher");
- mContext.startActivity(intent);
- }
- }
他这个意思是如果当前在launcher3,那么这个电源键正常使用,如果不在,那么就强制开启launcher3
我们只需要把这个回退到源码本来就可。就是电源键正常使用
if (down) {
interceptPowerKeyDown(event, interactive);
} else {
interceptPowerKeyUp(event, interactive, canceled);
}
}
break;
}
上面是针对本身不是launcher的应用,如果本身就是launcher应用,那么就把它设置成默认launcher就可以
在frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
在这个方法里startHomeActivityLocked,源码的最后加入
加入这个更改默认launcher的方法文章来源:https://www.toymoban.com/news/detail-401022.html
final PackageManager mPm = mContext.getPackageManager();
Intent homeIntent=new Intent();
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setAction(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_DEFAULT);
ResolveInfo info = mPm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);
ComponentName DefaultLauncher=new ComponentName("afrizona.maxalerts.rotas","afrizona.maxalerts.rotas.MainActivity");
ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
ComponentName[]mHomeComponentSet = new ComponentName[homeActivities.size()];
for (int i = 0; i < homeActivities.size(); i++) {
final ResolveInfo candidate = homeActivities.get(i);
Log.d(TAG,"homeActivitie: candidate = "+candidate);
final ActivityInfo activityInfo= candidate.activityInfo;
ComponentName activityName = new ComponentName(activityInfo.packageName, activityInfo.name);
mHomeComponentSet[i] = activityName;
}
IntentFilter mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);
mHomeFilter.addCategory(Intent.CATEGORY_HOME);
mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT);
List<ComponentName>Activities=new ArrayList();
mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY,mHomeComponentSet, DefaultLauncher);
完了别忘了把PhoneWindowManager里面别人强制电源键回launcher3的删了,如果有的话文章来源地址https://www.toymoban.com/news/detail-401022.html
到了这里,关于开机直接进入该应用作为默认launcher(霸屏)或者开机自启指定应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!