android 当系统存在多个Launcher时,如何设置开机自动进入默认的Launcher?

来自MTK  FAQ

当系统存在多个Launcher时,开机完成并解锁后,系统会弹出一个选择框让用户选择进入哪一个Launcher,如果不想选择,而是想直接进入某一个默认的Launcher,并且用户在设置->应用程序->管理应用程序->所有应用程序列表,找到之前设置的那个默认的Launcher,并且取消了默认值,可以重新弹出launcher选框。

下面以设置Google Launcher2作为默认启动的Launcher为例,其包名为com.android.launcher2

packages/apps/Provision/src/com/android/DefaultActivity.java文件

       ......

// remove this activity from the package manager.

               PackageManager pm = getPackageManager();

 

                   //add  start  

                   Intent intent=new Intent(Intent.ACTION_MAIN);

                   intent.addCategory(Intent.CATEGORY_HOME);

                   List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);

                   if(resolveInfoList != null){

                            int size = resolveInfoList.size();

                            for(int j=0;j<size;j++){

                                     final ResolveInfo r = resolveInfoList.get(j);

                                     if(r.activityInfo.packageName.equals(this.getPackageName())){    //attention

                                               resolveInfoList.remove(j);

                                               size -= 1;

                                               j--;

                                      }

                            }

                           

                            ComponentName[] set = new ComponentName[size];

                            ComponentName defaultLauncher=new ComponentName("com.android.launcher2", "com.android.launcher2.Launcher");

                            int defaultMatch=0;

                            for(int i=0;i<size;i++){

                                     final ResolveInfo resolveInfo = resolveInfoList.get(i);

                                     Log.d(TAG, resolveInfo.toString());

                                     set[i] = new ComponentName(resolveInfo.activityInfo.packageName,resolveInfo.activityInfo.name);

                                     if(defaultLauncher.getClassName().equals(resolveInfo.activityInfo.name)){

                                               defaultMatch = resolveInfo.match;

                                     }

                            }

                            Log.d(TAG,"defaultMatch="+Integer.toHexString(defaultMatch));

                            IntentFilter filter=new IntentFilter();

                            filter.addAction(Intent.ACTION_MAIN);

                            filter.addCategory(Intent.CATEGORY_HOME);

                            filter.addCategory(Intent.CATEGORY_DEFAULT);

                            pm.clearPackagePreferredActivities(defaultLauncher.getPackageName());

                            pm.addPreferredActivity(filter, defaultMatch, set, defaultLauncher);

                   }

                   //add  end

 

        // remove this activity from the package manager.

        ComponentName name = new ComponentName(this, DefaultActivity.class);

 pm.setComponentEnabledSetting(name,

PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
          PackageManager.DONT_KILL_APP);

       ......

 

然后修改packages/apps/Provision/AndroidManifest.xml文件,增加以下语句:

<uses-permission android:name=”android.permission.SET_PREFERRED_APPLICATIONS” />

 

说明:上面添加的代码中,需要注意如下这个if判断条件写法不是唯一的,如果按照FAQ的写法,设置默认Launcher不成功,则要根据系统当前apk的情况来做修改;

if(r.activityInfo.packageName.equals(this.getPackageName())){

 

不成功的原因是:系统有其他的apk也会接收Intent.ACTION_MAINCATEGORY_HOMEintent,而这些apk又不是Launcher程序(启动器程序)

这种情况下就需要在这个if判断中将这些apk的相应Activity剔除掉;

 

例如:Settings中有一个activity:CryptKeeper,它也会接收HOME intent,那么if判断就需要改为如下所示:

if(r.activityInfo.packageName.equals(this.getPackageName()) || r.activityInfo.name.equals("com.android.settings.CryptKeeper") ){

 

如果按照FAQ的写法,发现设置默认Launcher不成功,如何判断需要剔除哪些activity呢?

方法如下:在download完第一次开机时,用adb logcat -v time >main.log抓取main log,搜索DefaultActivity这个tag,因为在上面添加代码中,

 Log.d(TAG, resolveInfo.toString()); 这条语句会打印出resolveInfoList中每条记录的值,如果发现其中某一条记录不是Launcher程序,那么就在上面的if判断中,添加相应判断条件即可。

 

备注:上面所添加的全部代码,一定要放在pm.setComponentEnabledSetting这两行语句之前,如果放在这个语句后面,那所添加的代码就无法执行了,导致设置失效。这里的com.android.launcher2Google默认的Launcher2,可以根据自己的需要来定制,让系统进入指定的那个Launcher


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值