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

[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 {
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中使用STK求解两个卫星的矢量可以通过STK Object Model中的接口来实现,具体步骤如下: 1. 首先需要在C#工程中添加对STK Object Model的引用。 2. 初始化STK对象并打开场景,可以使用以下代码: ``` AgStkObjectRoot root = new AgStkObjectRoot(); root.NewScenario("ScenarioName"); ``` 3. 获取两个卫星的位置向量,可以使用以下代码: ``` IAgStkObject satellite1 = root.GetObjectFromPath("Satellite1"); IAgStkObject satellite2 = root.GetObjectFromPath("Satellite2"); Array position1 = (Array)satellite1.Position.QueryPlanetocentricArray_AsObject(AGI.STKUtil.AgEStkPositionType.eStkPositionTypeFixed); Array position2 = (Array)satellite2.Position.QueryPlanetocentricArray_AsObject(AGI.STKUtil.AgEStkPositionType.eStkPositionTypeFixed); ``` 其中,"Satellite1"和"Satellite2"是卫星的路径或名称,需要根据实际情况进行修改。position1和position2分别表示卫星1和2的位置向量。 4. 计算两个卫星之间的矢量,可以使用以下代码: ``` Array vector = new double[3]; vector[0] = Convert.ToDouble(position2.GetValue(0)) - Convert.ToDouble(position1.GetValue(0)); vector[1] = Convert.ToDouble(position2.GetValue(1)) - Convert.ToDouble(position1.GetValue(1)); vector[2] = Convert.ToDouble(position2.GetValue(2)) - Convert.ToDouble(position1.GetValue(2)); ``` 其中,vector表示两个卫星之间的矢量,其计算方式与前面所述的一致。 5. 最后,需要关闭STK对象以释放资源,可以使用以下代码: ``` root.CloseScenario(); root.Dispose(); ``` 需要注意的是,上述代码仅为示例,需要根据实际情况进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值