今天遇到一个问题就是sim卡插入希望能在stk显示相应的运营商信息
首先追踪sim stk是怎么install的
首先在AndroidManifest.xml里看到有三个activity
<span style="font-size:18px;"><activity android:name="StkLauncherActivity"
android:label="@string/app_name"
android:taskAffinity="android.task.StkLauncherActivity"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="StkLauncherActivity2"
android:label="@string/app_name2"
android:taskAffinity="android.task.StkLauncherActivity2"
android:enabled="false" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="StkLauncherActivity3"
android:label="@string/app_name3"
android:taskAffinity="android.task.StkLauncherActivity3"
android:enabled="false" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity></span>
这三个就是插卡的时候启动的activity,然后找在哪里启动
在StkAppInstaller.java里
<span style="font-size:18px;"> static void install(Context context, int slotId) {
setAppState(context, true, slotId);
}
</span>
追
<span style="font-size:18px;"> private static void setAppState(Context context, boolean install, int slotId) {
if (context == null) {
return;
}
PackageManager pm = context.getPackageManager();
if (pm == null) {
return;
}
ComponentName cName;
String[] launcherActivity = {
"com.android.stk.StkLauncherActivity",
"com.android.stk.StkLauncherActivity2",
"com.android.stk.StkLauncherActivity3"
};
// check that STK app package is known to the PackageManager
cName = new ComponentName("com.android.stk",
launcherActivity[slotId]);
int state = install ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
try {
pm.setComponentEnabledSetting(cName, state,
PackageManager.DONT_KILL_APP);
} catch (Exception e) {
CatLog.d("StkAppInstaller", "Could not change STK app state");
}
}</span>
这样看来stk的标题是写死的只能增加两个activity,功能相同,唯一的区别就是 android:label="@string/app_name"变一下
然后根据sim卡信息来选择
sim卡信息查询PhoneFactory.java里
<span style="font-size:18px;"> if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
phone = new GSMPhone(context,
sCommandsInterfaces[i], sPhoneNotifier, i);
} else if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
phone = new CDMALTEPhone(context,
sCommandsInterfaces[i], sPhoneNotifier, i);
}</span>
这样就可以解决这个问题,虽然比较傻,哈哈