首页 > 代码库 > android STK名称客制化

android STK名称客制化



例如,针对联通定制版,要实现将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名称客制化