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。

同理这里也要区分上面两种情况。

时间: 2024-09-29 16:35:39

android STK名称客制化的相关文章

客制化“*#0*#”恢复出厂设置

客制化"*#0*#"恢复出厂设置 packages/apps/Dialer/src/com/android/dialer/SpecialCharSequenceMgr.java private static final String MMI_RESET_PHONE = "*#0*#";public static final String FORMAT_AND_FACTORY_RESET = "com.android.internal.os.storage.

Workflow_客制化BusinessEvent进行消息传递(案例)

2014-06-27 BaoXinjian 一.摘要 在之前的博文中介绍了,如何获取从标砖business event抓取消息,如supplier event, 其实质,就是在supplier的任何create, update, delete的处理,都是通过interface和api进行处理的, 而在处理interface和api的package中都会通过wf_event.raise将消息进行传递出来 再通过其他的package对在队列中的消息进行处理,从而实现消息的异步处理,实现interfa

Dynamics AX 2012 R2 客制化RDP报表参数对话框

    当我们在使用RDP报表时,AX会根据Data Contract,自动生成报表参数对话框上的字段控件.一般情况下,该对话框能够满足我们的需求,但是如果有较为复杂或特殊的需求,就要我们对该对话框进行客制化.     Reinhard这里就有一张报表,需要使用员工编号作为参数.但是AX系统中默认的员工编号EDT,没有提供lookup方法.Reinhard将该员工编号EDT放在报表参数窗体上后,只能手工录入员工编号,不能通过下拉框进行选择.     默认效果是这样:     但是 Reinhar

android 客制化设置当剩余空间为5%时,提示用户内存空间已满

当mms收到该intent 后,会提示存储满,停止接受短/彩信. 这个值是直接定义在service里面的,目前无接口开放,所以无法配置. 在alps/frameworks/base/services/java/com/android/server/DeviceStorageMonitorService.java里面. 大概485行: mMemFullThreshold = FULL_THRESHOLD_BYTES; 改为 mMemFullThreshold =(5*mTotalMemory)/1

(8)Launcher3客制化之ContentProvider内容提供者,实现其他应用修改数据库更新等操作

首先添加两个权限 <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS"/> <uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS"/> 这两个是修改 桌面的数据库的权限 不添加就修改不了哦 直接通过内容提供者获取数据, static Ar

简单的博客页面客制化

DIY博客的页面 写在前面: 申请了博客第一件事当然是整一个炫酷的界面. 自己水平不够,选了个比较顺眼的皮肤,大部分是套用网上现成的模板完成的. 具体定制的内容: 1.字体的修改 2.版面占比的调整 3.UI细节的修改 4.加入了用户头像 和 一些修饰动图 5.时钟,访问统计,Github conner,天气,Live2d看板娘,分享栏,回到顶部按钮 等小插件 6.图片放大功能 7.3D效果标签云 8.背景图更换 9.背景漂浮线段的动态效果 10.鼠标点击现字的特效 11.QQ联系 和 打赏功能

Oracle EBS12.2 注册客制化应用

一.Oracle APP和DB的基本信息 1.应用和数据库环境: Application Node in Linux7.3 Database Node on Linux 7.3 2.Oracle EBS 应用版本: R12.2.6 on Linux7.3  x_86(64bit) 3.数据库信息: Oracle  Database R12.1.0.2 on Linux 7.3 x_86(64bit) 二.实现步骤 1.在数据库中创建cux用户,并授权.相关命令如下: --(1)创建cux用户  

BEvent_客制化BusinessEvent通过Workflow接受消息传递(案例)

2014-08-03 Created By BaoXinjian

(7)Launcher3客制化之,修改单屏幕后,Fix在Hotseat拖动应用删除报错

修改单屏幕后,在workspace里面拖动图标,到删除按钮上松开的时候,报错问题. 并且无法再次显示拖动的图标. 拖动松开手时候触发 public void onDropCompleted(final View target, final DragObject d,             final boolean isFlingToDelete, final boolean success) {         if (mDeferDropAfterUninstall) {//如果要卸载软件