[FAQ19483][SAT]双卡情况下如何显示两个STK icon图标

本文介绍如何在双卡手机上分别显示两个STK应用图标的方法,包括修改AndroidManifest.xml文件以配置双卡的STKAPP,并在StkAppService.java中调整安装逻辑。同时提供了解决无卡状态下仍保持图标显示的技术方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[DESCRIPTION]
 
     对于双卡版本,在M,N版本之后都只是显示一个STK APP图标。但是有一些运营商要求双卡版本需要分开显示STK APP,也就是要显示两个STK APP图标。
 
[SOLUTION]
 
      对于显示两个STK APP图标主要有如下几个步骤可供参考:
      1, 参考cu版本修改 AndroidManifest.xml,主要是为了在manifest中配置双卡的stk app.
      例如可以
 /vendor/mediatek/proprietary/packages/apps/Stk/cu/AndroidManifest.xml
 修改为:
/vendor/mediatek/proprietary/packages/apps/Stk/AndroidManifest.xml
 
      2, startPollingIccid修改install SIM1和SIM2 (StkAppService.java )
      主要是为了instal双卡stk app。
       demo code例如:
        /vendor/mediatek/proprietary/packages/apps/Stk/src/com/android/stk/StkAppService.java
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
private void startPollingIccId() {
 
////////////////////
 
 
 
4304 // Install StkMain by default
 
4305 if (-1 == appInstaller.getIsInstalled(appInstaller.STK_LAUNCH_ID)) {
 
4306 appInstaller.install(mContext, appInstaller.STK_LAUNCH_ID);
 
4307 SystemClock.sleep(100);
 
4308 }
 
4309
 
4310 for (simIdx = PhoneConstants.SIM_ID_1; simIdx < mSimCount; simIdx++) {
 
4311 CatLog.d(LOG_TAG, "mIccId[" + simIdx + "]: " + mIccId[simIdx]);
 
4312 if (ICCID_STRING_FOR_NO_SIM.equals(mIccId[simIdx])) {
 
4313 appInstaller.unInstall(mContext, simIdx);
 
4314 StkAvailable(simIdx, STK_AVAIL_NOT_AVAILABLE);
 
4315 mStkContext[simIdx].mIccCardState = 0;
 
4316 } else {
 
4317 if ((mIccId[simIdx] != null) || false == ("".equals(mIccId[simIdx]))) {
 
4318 // If any mIccId[] is valid, install StkMain
 
4319 if (appInstaller.STK_NOT_INSTALLED ==
 
4320 appInstaller.getIsInstalled(appInstaller.STK_LAUNCH_ID)) {
 
4321 appInstaller.install(mContext, appInstaller.STK_LAUNCH_ID);
 
4322 }
 
4323 mStkContext[simIdx].mIccCardState = 1;
 
4324 }
 
4325 }
 
4326 }
 修改为:
[Java]hide
1
2
3
appInstaller.install(mContext, PhoneConstants.SIM_ID_1);
 
appInstaller.install(mContext, PhoneConstants.SIM_ID_2);
 
      如上两个步骤已经实现显示两个stk app,但是无卡情况下是会被uninstall的,因此如果需要在无卡情况下也显示icon,需要继续修改步骤3.
      3, 修改在收到SIM STATE CHANGE广播后避免被uninstall.
      demo code例如如下:
 /vendor/mediatek/proprietary/packages/apps/Stk/src/com/android/stk/BootCompletedReceiver.java
第一处修改:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
////////////////////////////////
 
282 if (appService != null) {
 
283 int currentState = appService.StkQueryAvailable(SIMID);
 
284 CatLog.d(LOG_TAG, "[ACTION_SIM_STATE_CHANGED][bUnInstall] : " + bUnInstall + ", currentState: " + currentState);
 
285 if (bUnInstall && app_state == StkAppInstaller.STK_INSTALLED) {
 
////////////////////////////////
修改为:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 /////////////////////////////////
 
282 if (appService != null) {
 
283 int currentState = appService.StkQueryAvailable(SIMID);
 
284 CatLog.d(LOG_TAG, "[ACTION_SIM_STATE_CHANGED][bUnInstall] : " + bUnInstall + ", currentState: " + currentState);
 
 bUnInstall = false;
 
 CatLog.d(LOG_TAG, "[ACTION_SIM_STATE_CHANGED][bUnInstall] : force to install STK app bUnInstall = false.");
 
285 if (bUnInstall && app_state == StkAppInstaller.STK_INSTALLED) {
 
////////////////////////////////
 
 /vendor/mediatek/proprietary/packages/apps/Stk/src/com/android/stk/BootCompletedReceiver.java
第二处修改:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
260 } else if ((IccCardConstants.INTENT_VALUE_ICC_ABSENT).equals(SIMStatus)) {
 
261 CatLog.d(LOG_TAG, "SIM_ABSENT, removed sim: " + SIMID);
 
262 /*For OP02 spec v4.1 start*/
 
263 String optr = SystemProperties.get("ro.operator.optr");
 
264 if (optr != null && "OP02".equals(optr)) {
 
265 SystemProperties.set(
 
266 INSTALL_STK_IF_FLIGHT_MODE_ON_PROPERTY[SIMID], "0");
 
267 }
 
268 Bundle args = new Bundle();
 
269 args.putInt(StkAppService.OPCODE, StkAppService.OP_REMOVE_STM);
 
270 args.putInt(StkAppService.SLOT_ID, SIMID);
 
271 context.startService(new Intent(context, StkAppService.class).putExtras(args));
 
272 } else {
 修改为:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
260 } else if ((IccCardConstants.INTENT_VALUE_ICC_ABSENT).equals(SIMStatus)) {
 
261 CatLog.d(LOG_TAG, "SIM_ABSENT, removed sim: " + SIMID);
 
262 /*For OP02 spec v4.1 start*/
 
263 String optr = SystemProperties.get("ro.operator.optr");
 
264 if (optr != null && "OP02".equals(optr)) {
 
265 SystemProperties.set(
 
266 INSTALL_STK_IF_FLIGHT_MODE_ON_PROPERTY[SIMID], "0");
 
267 }
 
// Bundle args = new Bundle();
 
// args.putInt(StkAppService.OPCODE, StkAppService.OP_REMOVE_STM);
 
// args.putInt(StkAppService.SLOT_ID, SIMID);
 
// context.startService(new Intent(context, StkAppService.class).putExtras(args));
 
272 } else {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值