1. 程式人生 > >android 桌面圖示屬性相關

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));
}

    }