Android7.0 MTK 设置默认桌面

项目需求:客户安装自己公司的桌面apk,安装完成后自动设置为默认桌面且不弹出始终和仅一次的弹框

1.找到安装应用的文件

frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java

   try {
            PackageParser.Package newPackage = scanPackageTracedLI(pkg, policyFlags, scanFlags,
                    System.currentTimeMillis(), user);

            updateSettingsLI(newPackage, installerPackageName, null, res, user);

            if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
			
			
                prepareAppDataAfterInstallLIF(newPackage);
				

				Log.d("yh", "pkgName " +pkgName);
				// 由于客户的应用保密 这里使用点心桌面的包名---com.dianxinos.dxhome
				if (pkgName.equals("com.dianxinos.dxhome")){
					//发送广播
					Intent intent = new      Intent("android.intent.action.UPDATE_LANUCHER_APPS");
					mContext.sendBroadcast(intent);
				}
                //------------------------


            } else {
                // Remove package from internal structures, but keep around any
                // data that might have already existed
                deletePackageLIF(pkgName, UserHandle.ALL, false, null,
                        PackageManager.DELETE_KEEP_DATA, res.removedInfo, true, null);
            }
        } catch (PackageManagerException e) {
            res.setError("Package couldn't be installed in " + pkg.codePath, e);
        }

        Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
    }



2.由于设置默认桌面时,是在Settings中设置的所以广播接收者在settings中添加并设置默认桌面(添加文件–packages\apps\Settings\src\com\android\settings下—UpdateLanucherReceiver.java)


package com.android.settings;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.ComponentName;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import java.util.ArrayList;
import android.util.Log;
import android.content.pm.ActivityInfo;
import java.util.List;


public class  UpdateLanucherReceiver extends BroadcastReceiver {
    
    public UpdateLanucherReceiver() {
    }
    
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.UPDATE_LANUCHER_APPS")) {
			Log.e("yhyh" ," onReceive");
			
			final PackageManager mPm = context.getPackageManager();

            //  点心桌面的包名类名 com.dianxinos.dxhome / com.nd.hilauncherdev.launcher.Launcher设置默认桌面
			ComponentName DefaultLauncher=new ComponentName(" com.dianxinos.dxhome",
                    "com.nd.hilauncherdev.launcher.Launcher");
            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.e("yhyh","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);
          
			//刷新桌面
		   Intent intent2 = new Intent(Intent.ACTION_MAIN);
           intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           intent2.addCategory(Intent.CATEGORY_HOME);
           context.startActivity(intent2);
	   }
    }
}

3.packages\apps\Settings\AndroidManifest.xml

<!-- yh -->
		<receiver
            android:name=".UpdateLanucherReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.UPDATE_LANUCHER_APPS" />
            </intent-filter>
        </receiver>
发布了56 篇原创文章 · 获赞 14 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览