android 桌面图标属性相关

launcher3的桌面有apk的图标属性是因为清单文件的

<category android:name="android.intent.category.LAUNCHER"/>
这个属性,所以一个apk可以有多个桌面图标属性,比如Velvet.apk(- -。很多人不知道这个就是google.quicksearchbox这包名对应的apk,主要是包名和apk名字不一致,以前我也找了好久)就有两个图标,一个是Google,一个是VoiceSearch。
相关应用场景
1.桌面图标客制化,有的时候需要客制化预置的apk图标,前提就是要知道这个apk的有
android.intent.category.LAUNCHER属性的包名和类名,方法是反编译获得清单文件之后去看包名类名即可,有的是用adb命令去抓包名类名获得的,一般的主界面的activity都是默认的图标属性的包名类名,但是也不是100%,因为你抓到的主界面的包名类名可能是实际的首界面跳转之后的那个界面
2.MTK平台遇到过一种客户反馈的bug,桌面没有录音apk的图标,但是实际编译了SouderRecoder这个apk,机器里面 也有这个apk,但是就是桌面看不到图标,后面一看清单文件,原来是清单文件没有加那个属性引起的
3.需要隐藏VoiceSearch图标,在launcher3中的LauncherMode中过滤了google.quicksearchbox包名之后VoiceSearch是去掉了,但是Google图标也被过滤了,实际只要过滤VoiceSearch图标对应的android.intent.category.LAUNCHER属性的包名和类名就行了,而不是只过滤包名,因为两个图标属性都是共一个包名的,这样解过滤桌面图标还有一个bug,在7.0喷到的,就是当进入allapp之后,由于客制化的apk比较多,可以上下获得allapp的界面,之后voicesearch图标又跑出来了,或者切换用户的时候也跑出来了,切换用户接口是在SystemUI的GuestResumeSessionReceiver,上下滑动桌面图标的接口是在
packages\apps\Launcher3\src\com\android\launcher3\LauncherModel.java
    @Override
    public void onPackageChanged(String packageName, UserHandleCompat user) {//每次滑动的时候会调用onPackageChanged更新图标
Log.i("xiaozheng", "nPackageChanged-packageName="+packageName+",userId="+user.getUser().getCallingUserId());
if((packageName.equals("com.google.android.googlequicksearchbox") 
||(packageName.equals("com.autoreboot.android")))){
Log.i("xiaozheng", "此时不更新voicesearch/autoreboot");
}else{
int op = PackageUpdatedTask.OP_UPDATE;
enqueuePackageUpdated(new PackageUpdatedTask(op, new String[] { packageName },
                user));
}

    }

猜你喜欢

转载自blog.csdn.net/u010672559/article/details/79974285