android STK名稱客制化

來源:互聯網
上載者:User

標籤:android   io   ar   os   使用   sp   java   for   檔案   



例如,針對聯通定製版,要實現將SIM卡應用程式名稱動態修改成電訊廠商名稱:
背景:
1. 由於SAT應用是動態安裝的,launcher菜單中的SIM卡應用表徵圖是Stk1.apk的表徵圖。
2. 電訊廠商的名稱是儲存在:
   卡1: TelephonyProperties.PROPERTY_OPERATOR_ALPHA
   卡2: TelephonyProperties.PROPERTY_OPERATOR_ALPHA_2
 
客制化步驟:
1.   從SystemProperty中擷取卡的電訊廠商名稱
1.1、GB3版本:
修改檔案:ContextImpl.java
具體修改如下:
import android.os.SystemProperties;
import com.android.internal.telephony.TelephonyProperties;
@Override
public CharSequence getText(String packageName, int resid,
ApplicationInfo appInfo) {
      ResourceName name = new ResourceName(packageName, resid);
      CharSequence text = getCachedString(name);
      if (text != null) {
           //add start
           if(packageName.equalsIgnoreCase("com.android.stk")) {
                Log.d("jby","packagemanager1,stkpackageName1:"+packageName);
                String tmptext=SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ALPHA);
                if(!tmptext.isEmpty())
                    if(!tmptext.equalsIgnoreCase("com.android.stk"))
                    text=tmptext;
            }else if(packageName.equalsIgnoreCase("com.android.stk2")) {
                Log.d("jby","packagemanager1,stkpackageName2:"+packageName);
                String tmptext=SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ALPHA_2);
                if(!tmptext.isEmpty())
                   if(!tmptext.equalsIgnoreCase("com.android.stk2"))
                       text=tmptext;
           }
           Log.d("jby","text="+text);
           //add end
           return text;
       }
       if (appInfo == null) {
          try {
              appInfo = getApplicationInfo(packageName, 0);
          } catch (NameNotFoundException e) {
              return null;
          }
       }
       try {
          Resources r = getResourcesForApplication(appInfo);
          text = r.getText(resid);
          putCachedString(name, text);
          //add start
          if(packageName.equalsIgnoreCase("com.android.stk")) {
              Log.d("jby","packagemanager1,stkpackageName1:"+packageName);
              String tmptext=SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ALPHA);
              if(!tmptext.isEmpty())
                  if(!tmptext.equalsIgnoreCase("com.android.stk"))
                      text=tmptext;
           } else if(packageName.equalsIgnoreCase("com.android.stk2")) {
              Log.d("jby","packagemanager2,stkpackageName2:"+packageName);
              String tmptext=SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ALPHA_2);
              if(!tmptext.isEmpty())
                  if(!tmptext.equalsIgnoreCase("com.android.stk2"))
                      text=tmptext;
           }
           Log.d("jby","text="+text);
          //add end
          return text;
       } catch (NameNotFoundException e) {
          Log.w("PackageManager", "Failure retrieving resources for"
+ appInfo.packageName);
       } catch (RuntimeException e) {
            // If an exception was thrown, fall through to return
            // default icon.
            Log.w("PackageManager", "Failure retrieving text 0x"
+ Integer.toHexString(resid) + " in package "
+ packageName, e);
      }
      return null;
}
 
1.2、同理,JB2以及JB2以後的版本:
修改檔案:ApplicationPackageManager.java
具體修改:參考上述的GB3版本修改,基本一樣。
 
 
2.   使用步驟1中擷取的電訊廠商名字來動態修改package對應的app name(應用程式名稱字)
修改檔案:PagedViewIcon.java
KK以前的版本該檔案路徑: alps\packages\apps\launcher2\src\com\android\launcher2\
KK以後的版本該檔案路徑: alps\packages\apps\launcher3\src\com\android\launcher3\
 
2.1、GB3、GB5版本:
    將applyFromApplicationInfo()方法中的setText,通過packageName來過濾,設定期望顯示的名字。 
   例如:packageName = “com.android.stk1”, 期望顯示的名字"我的名字"
   if (packageName 等於info.componentName.mPackage)
   {
       setText("我的名字")  
   }
   else
   {
       setText(info.title);
   }
 
 
2.2、JB2以及JB2以後的版本
  兩個stk應用程式是共用一個packageName的,所以無法通過包名來區分,必須通過類名來區分。例如插入卡槽2的sim或usim應用程式是通過啟動"stkLauncherActivityⅡ"。 
   因此,將applyFromApplicationInfo()方法中的setText,通過TargetclassName來過濾,設定期望顯示的名字。    
   例如:TargetclassName = “stkLauncherActivityⅡ”, 期望顯示的名字"我的名字"
   if (TargetclassName 等於info.componentName.mClass)
   {
       setText("我的名字")  
   }
   else
   {
       setText(info.title);
   }
 
 
 
修改應用程式的捷徑名稱:
修改檔案:IconCache.java
KK以前的路徑:packages\apps\launcher2\src\com\android\launcher2\IconCache.java
KK以後的路徑:packages\apps\launcher3\src\com\android\launcher3\IconCache.java
具體修改:
將cacheLocked()方法中, 通過特殊判斷將要顯示的名字賦值給entry.title。
同理這裡也要區分上面兩種情況。

android STK名稱客制化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.