开机直接进入该应用作为默认launcher(霸屏)或者开机自启指定应用

开机默认此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的方法

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的删了,如果有的话

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Youth King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值