5.1 代码切换launcher

 

 需要权限

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

且需在配置文件中添加android:sharedUserId="android.uid.system",并签名

签名方法参考https://blog.csdn.net/u010559573/article/details/102501458

private void switchLauncher(Context context,ComponentName activity) {
    PackageManager pm = context.getPackageManager();
    Log.d("YYY","switch launcher "+activity);
    try {
        Class<?> packageManager = Class.forName("android.content.pm.PackageManager");
        Method replacePreferedActivity = packageManager.getMethod("replacePreferredActivity",IntentFilter.class,int.class,ComponentName[].class,ComponentName.class);
        IntentFilter homeFilter = new IntentFilter(Intent.ACTION_MAIN);
        homeFilter.addCategory(Intent.CATEGORY_HOME);
        homeFilter.addCategory(Intent.CATEGORY_DEFAULT);

        List<ResolveInfo> resolveInfos = new ArrayList<ResolveInfo>();
        ComponentName curLauncher = listHomeActivitys(context,resolveInfos);
        if(resolveInfos != null && resolveInfos.size() > 0) {
            ComponentName[] componentNames = new ComponentName[resolveInfos.size()];
            for(int i =0 ; i<resolveInfos.size();i++) {
                ActivityInfo activityInfo = resolveInfos.get(i).activityInfo;
                if(activityInfo != null) {
                    ComponentName cn = new ComponentName(activityInfo.packageName, activityInfo.name);
                    componentNames[i] = cn;
                    Log.d("YYY","launcher:"+cn);
                }
            }
            replacePreferedActivity.setAccessible(true);
            replacePreferedActivity.invoke(homeFilter,IntentFilter.MATCH_CATEGORY_EMPTY,componentNames,activity);
            killPackage(context,curLauncher.getPackageName());
        }else {
            Log.e("YYY","get home resolve info empty");
        }

    } catch (Exception e) {
        Log.e("YYY",""+e);
        e.printStackTrace();
    }

}

private ComponentName listHomeActivitys(Context context,List<ResolveInfo> outs){
    PackageManager pm = context.getPackageManager();
    Object cn = null;
    try {
        Class<?> packageManager = Class.forName("android.content.pm.PackageManager");
        Method getHomeActivities = packageManager.getMethod("getHomeActivities",List.class);
        getHomeActivities.setAccessible(true);
        cn = getHomeActivities.invoke(pm,outs);
    }catch (Exception e) {
        Log.e("YYY",""+e);
        e.printStackTrace();
    }
    return (ComponentName) cn;
}

private void killPackage(Context context,String pkg) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    am.killBackgroundProcesses(pkg);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值