更换SIM卡时的事件

时间:2011-03-22 10:01:50

标签: android

如何在手机中更改SIM卡时访问活动?

5 个答案:

答案 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
    }

}