在双SIM卡Android移动设备中获取两个SIM卡插槽的IMEI

时间:2014-02-13 06:20:11

标签: java android imei dual-sim

我正在为双卡手机创建一个应用程序。应用程序应该能够检测用户通过其进行呼叫的SIM卡。它可以是拨出或来电。我试图使用this tutorial获取设备的两个IMEI。但它为第二个IMEI号

返回null

如何在拨打或接听电话时检测用户使用的是哪种SIM卡。

请建议任何方法来实现这一目标。

2 个答案:

答案 0 :(得分:3)

要在控制台中查看SIM1类型的状态:

adb shell dumpsys telephony.registry

要在控制台中查看SIM2类型的状态:

adb shell dumpsys telephony.registry2
来电/拨出电话

mCallState已更改。它可以让您知道用于呼叫的SIM卡

从Java应用程序调用{​​{1}}时,清单中需要dumpsys。但它不能用于某些新设备(它们会失败并且#34; Permission Denial")。

答案 1 :(得分:0)

这可能会给你两个手机的imei有双卡。

    public static void samsungTwoSims(Context context) {
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

try{

    Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

    Class<?>[] parameter = new Class[1];
    parameter[0] = int.class;
    Method getFirstMethod = telephonyClass.getMethod("getDefault", parameter);

    Log.d(TAG, getFirstMethod.toString());

    Object[] obParameter = new Object[1];
    obParameter[0] = 0;
    TelephonyManager first = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

    Log.d(TAG, "Device Id: " + first.getDeviceId() + ", device status: " + first.getSimState() + ", operator: " + first.getNetworkOperator() + "/" + first.getNetworkOperatorName());

    obParameter[0] = 1;
    TelephonyManager second = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

    Log.d(TAG, "Device Id: " + second.getDeviceId() + ", device status: " + second.getSimState()+ ", operator: " + second.getNetworkOperator() + "/" + second.getNetworkOperatorName());
} catch (Exception e) {
    e.printStackTrace();
}   

}