3

我正在为双卡手机创建一个应用程序。该应用程序应该能够检测到用户通过其拨打电话的 SIM 卡。它可以是呼出或呼入。我已尝试使用本教程获取设备的 IMEI 编号。但它为第二个 IMEI 号返回 null。

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

请提出任何方法来实现这一点。

4

2 回答 2

3

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

adb shell dumpsys telephony.registry

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

adb shell dumpsys telephony.registry2

mCallState在来电/去电时更改。它可以让您知道用于通话的 SIM 卡

当您dumpsys从 Java 应用程序调用时,您需要android.permission.DUMP在清单中。但它不适用于某些新设备(它们因“Permission Denial”而失败)。

于 2014-10-28T15:39:45.550 回答
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();
}   

}

于 2016-08-04T06:42:14.320 回答