問題:桌面google日歷名稱不跟隨系統語言變化
分析:
- 碰到google的apk,一般先確認是不是apk的問題
- 然后看是不是平臺的問題
- 都不是的話再根據現象分析
1.先看第一步,launcher的所有其他apk都會變化,只有google日歷不跟隨系統語言變化,先把Google 日歷的apk pull出來裝到自己的手機上,
adb shell pm path com.google.android.calendar 看下apk在那個路徑,然后adb pull出來裝到小米9,發現日歷應用作業正常,說明apk沒問題
2.然后我準備用drive only版本測驗,是不是平臺問題,后面一想是的話,給平臺處理又要等他好久,于是就沒驗證
3. 既然不打算驗證平臺問題,那么就自己分析吧,
- 腦子里大概有個思路,就是在launcher.java 的onConfigurationChanged里面監聽語言變化處理,然后我發現語言變化并不會呼叫到launcher的這個方法;
- 就想著通過收聽語言變化的廣播來處理,android.intent.action.LOCALE_CHANGED,但是在Launcher里找了半天沒發現更新名稱的邏輯
- 于是就想到了alps\packages\apps\Launcher3\src\com\android\launcher3\BubbleTextView.java,Launcher上的圖示都是這東西展示的,然后這個類里搜索了下setText()的方法,發現只有一個地方呼叫,就是下面展示的地方,找到之后,我們只需要判斷是google 日歷的時候,獲取他的apk名字,然后再setText()就可以了
private void applyIconAndLabel(ItemInfoWithIcon info) {
FastBitmapDrawable iconDrawable = newIcon(getContext(), info);
mDotParams.color = IconPalette.getMutedColor(info.bitmap.color, 0.54f);
setIcon(iconDrawable);
setText(info.title);
// Add by HZH on 2020/12/3 start
if (info instanceof WorkspaceItemInfo) {
ComponentName cn = new ComponentName("com.google.android.calendar","com.android.calendar.event.LaunchInfoActivity");
if (cn.equals(((WorkspaceItemInfo) info).getTargetComponent())) {
try {
PackageManager packageManager = getContext().getPackageManager();
ActivityInfo activityInfo = packageManager.getActivityInfo(cn, 0);
CharSequence googleCalender = activityInfo.loadLabel(packageManager);
setText(googleCalender);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
// Add by HZH on 2020/12/3 end
if (info.contentDescription != null) {
setContentDescription(info.isDisabled()
? getContext().getString(R.string.disabled_app_label, info.contentDescription)
: info.contentDescription);
}
}
經驗證,問題解決,并且比其他apk切換語言更快
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/229887.html
標籤:其他
