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

来源:互联网 发布:unity3d制作2d游戏教程 编辑:程序博客网 时间:2024/05/21 21:50
[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
privatevoid startPollingIccId() {
 
////////////////////
 
 
 
4304// Install StkMain by default
 
4305if (-1== appInstaller.getIsInstalled(appInstaller.STK_LAUNCH_ID)) {
 
4306appInstaller.install(mContext, appInstaller.STK_LAUNCH_ID);
 
4307SystemClock.sleep(100);
 
4308}
 
4309
 
4310for (simIdx = PhoneConstants.SIM_ID_1; simIdx < mSimCount; simIdx++) {
 
4311CatLog.d(LOG_TAG, "mIccId["+ simIdx + "]: " + mIccId[simIdx]);
 
4312if (ICCID_STRING_FOR_NO_SIM.equals(mIccId[simIdx])) {
 
4313appInstaller.unInstall(mContext, simIdx);
 
4314StkAvailable(simIdx, STK_AVAIL_NOT_AVAILABLE);
 
4315mStkContext[simIdx].mIccCardState = 0;
 
4316} else{
 
4317if ((mIccId[simIdx] != null) || false== ("".equals(mIccId[simIdx]))) {
 
4318// If any mIccId[] is valid, install StkMain
 
4319if (appInstaller.STK_NOT_INSTALLED ==
 
4320appInstaller.getIsInstalled(appInstaller.STK_LAUNCH_ID)) {
 
4321appInstaller.install(mContext, appInstaller.STK_LAUNCH_ID);
 
4322}
 
4323mStkContext[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
////////////////////////////////
 
282if (appService != null) {
 
283int currentState = appService.StkQueryAvailable(SIMID);
 
284CatLog.d(LOG_TAG, "[ACTION_SIM_STATE_CHANGED][bUnInstall] : " + bUnInstall + ", currentState: " + currentState);
 
285if (bUnInstall && app_state == StkAppInstaller.STK_INSTALLED) {
 
////////////////////////////////
修改为:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 /////////////////////////////////
 
282if (appService != null) {
 
283int currentState = appService.StkQueryAvailable(SIMID);
 
284CatLog.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.");
 
285if (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} elseif ((IccCardConstants.INTENT_VALUE_ICC_ABSENT).equals(SIMStatus)) {
 
261CatLog.d(LOG_TAG, "SIM_ABSENT, removed sim: " + SIMID);
 
262/*For OP02 spec v4.1 start*/
 
263String optr = SystemProperties.get("ro.operator.optr");
 
264if (optr != null&& "OP02".equals(optr)) {
 
265SystemProperties.set(
 
266INSTALL_STK_IF_FLIGHT_MODE_ON_PROPERTY[SIMID], "0");
 
267}
 
268Bundle args = newBundle();
 
269args.putInt(StkAppService.OPCODE, StkAppService.OP_REMOVE_STM);
 
270args.putInt(StkAppService.SLOT_ID, SIMID);
 
271context.startService(newIntent(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} elseif ((IccCardConstants.INTENT_VALUE_ICC_ABSENT).equals(SIMStatus)) {
 
261CatLog.d(LOG_TAG, "SIM_ABSENT, removed sim: " + SIMID);
 
262/*For OP02 spec v4.1 start*/
 
263String optr = SystemProperties.get("ro.operator.optr");
 
264if (optr != null&& "OP02".equals(optr)) {
 
265SystemProperties.set(
 
266INSTALL_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{
0 0