如何在手机中更改SIM卡时访问活动?
答案 0 :(得分:15)
基本上,这个问题“How to monitor SIM state change”的答案也是您问题的正确答案。
所以你创建了一个新类
package a.b.c;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class SimChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
Log.d("SimChangedReceiver", "--> SIM state changed <--");
// Most likely, checking if the SIM changed could be limited to
// events where the intent's extras contains a key "ss" with value "LOADED".
// But it is more secure to just always check if there was a change.
}
}
并调整AndroidManifest.xml以包含
<!-- put this where your other permissions are: -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- and -->
<application
android:name="a.b.c...."
... >
<!-- put this somewhere into your application section: -->
<receiver android:name="a.b.c.SimChangedReceiver">
<intent-filter>
<action android:name="android.intent.action.SIM_STATE_CHANGED"/>
</intent-filter>
</receiver>
</application>
与Android上一样,不保证它适用于任何版本或任何制造商的设备。
答案 1 :(得分:9)
我不知道某个事件,但是当交换SIM卡时手机将关闭然后打开,因此您可以创建一个服务,在首选项中存储SIM序列号,然后比较存储的序列号当服务开始时在当前SIM中。
以下是访问SIM详细信息的详细信息: Access the SIM Card with an Android Application?
答案 2 :(得分:7)
保存最新的SIM卡ID,每次手机从AirplaneModeON状态转到AirplaneModeOFF时,检查新的SIM ID是否与之前保存的SIM ID相同。
检查this answer以了解如何检测飞行模式。
我希望这能回答你的问题。
答案 3 :(得分:3)
您必须注册BroadcastReceiver
才能接收操作android.intent.action.SIM_STATE_CHANGED
。
此操作包含在com.android.internal.telephony.TelephonyIntents.java
中,无法在Android的文档中找到。当您收到它时(例如插入/拔出SIM卡),请使用密钥ss
获取Sim State。
答案 4 :(得分:1)
@Override
public void onReceive(final Context context, final Intent intent) {
Log.d("SimChangedReceiver", "--> SIM state changed <--");
SubscriptionManager sm = SubscriptionManager.from(context);
List<SubscriptionInfo> sis = sm.getActiveSubscriptionInfoList();
SubscriptionInfo si = sis.get(0);
SubscriptionInfo si1 = sis.get(1);
String iccId = si.getIccId();
String iccId1 = si1.getIccId();
Log.e("iccId---------", iccId);
Log.e("iccId1---------", iccId1);
if (iccId.equals(oldID1)
{
//Your Code
}else if (iccIdiccId1.equals(oldID2)
{
//Your Code
}
}