[FAQ05657][SAT]如何动态修改SIM卡应用名称

SOLUTION]

方法一:

以将STK app name动态修改成运营商名称为例子。

1、运营商的名称存储在以下SystemProperty中

卡1:  TelephonyProperties.PROPERTY_OPERATOR_ALPHA 

卡2:  TelephonyProperties.PROPERTY_OPERATOR_ALPHA_2  

 

2、使用运营商名字来动态修改package对应的app name(应用程序名字) 

2.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;

        }

 

2.2  如果是JB2以及JB2以后的版本,则

修改文件:ApplicationPackageManager.java

具体修改:参考上述的GB3版本修改,基本一样。  

 

方法二:

1、如果是GB3、GB5版本,则

修改文件:

packages\apps\launcher2\src\com\android\launcher2\PagedViewIcon.java

 具体修改:将applyFromApplicationInfo()方法中的setText,通过packageName来过滤,设置期望显示的名字。

   例如:packageName = “com.android.stk1”, 期望显示的名字"我的名字",则

   if (packageName 等于info.componentName.mPackage)

   {

       setText("我的名字")  

   }

   else

   {

       setText(info.title);

   }

  

2、如果是JB2以及JB2以后的版本,则

修改的文件: PagedViewIcon.java

两个SAT应用程序是共用一个packageName的,所以无法通过应用的包名来区分,必须通过类名来区分。

例如:插入卡槽2的SIM或USIM应用程序是通过启动"stkLauncherActivityⅡ"。

 将applyFromApplicationInfo()方法中的setText,通过TargetclassName来过滤,设置期望显示的名字。

   例如:TargetclassName = “stkLauncherActivityII”, 期望显示的名字"我的名字",则

   if (TargetclassName 等于info.componentName.mClass)

   {

       setText("我的名字")  

   }

   else

   {

       setText(info.title);

   }

 

L0 、L1 、M版本:

由于StkAppService启动的packageName和activity都只有一个,所以无法区分,因此,无法用这种方法做客制化。

 

例如:针对联通定制版,要实现STK应用名称从卡里读取并显示(JB2以及JB2以后的版本)。

由于SAT 应用是动态安装的。launcher 菜单中的 SAT应用图标是 Stk1.apk的图标。

1、从systemproperty中获取卡的运营商名称。
可以参考方法2中的2.1 的demo code,修改 ApplicationPackageManager.java 文件的 getText() 方法,从SystemProperties中获取对应的卡的运营商名称:
String tmptext=SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ALPHA);
String tmptext=SystemProperties.get(TelephonyProperties.PROPERTY_OPERATOR_ALPHA_2);

2、两个SAT应用程序是共用一个packageName的,所以无法通过包名来区分,必须通过类名来区分。

例如插入卡槽2的sim或usim应用程序是通过启动"stkLauncherActivityII"
将applyFromApplicationInfo()方法中的setText,通过TargetclassName来过滤,设置期望显示的名字 为从步骤 1 获取到的名字。
例如:TargetclassName = “stkLauncherActivityII”, 期望显示的名字"我的名字"
if (TargetclassName 等于info.componentName.mClass)
{
setText("我的名字") 
}
else
{
setText(info.title);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值