如何动态修改SIM卡应用名称
时间:10-02
整理:3721RD
点击:
[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 版本:
由于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);
}
方法一:
以将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 版本:
由于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);
}