[DESCRIPTION]
对于双卡版本,在M,N版本之后都只是显示一个STK APP图标。但是有一些运营商要求双卡版本需要分开显示STK APP,也就是要显示两个STK APP图标。
[SOLUTION]
对于显示两个STK APP图标主要有如下几个步骤可供参考:
例如可以
/vendor/mediatek/proprietary/packages/apps/Stk/cu/AndroidManifest.xml
修改为:
/vendor/mediatek/proprietary/packages/apps/Stk/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
{ |