[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
{
|