簡體   English   中英

在雙SIM卡Android移動設備中獲取兩個SIM卡插槽的IMEI

[英]Get IMEI of both sim slots in dual sim android mobile devices

我正在為雙卡手機創建一個應用程序。 應用程序應該能夠檢測用戶通過其進行呼叫的SIM卡。 它可以是撥出或來電。 我試圖使用本教程獲得設備的兩個IMEI。 但它為第二個IMEI號返回null。

任何我如何檢測用戶在撥打或接聽電話時使用的SIM卡。

請建議任何方法來實現這一目標。

要在控制台中查看SIM1類型的狀態:

adb shell dumpsys telephony.registry

要在控制台中查看SIM2類型的狀態:

adb shell dumpsys telephony.registry2

傳入/傳出呼叫時mCallState更改。 它可以讓您知道哪個SIM卡用於通話

從Java應用程序調用dumpsys ,清單中需要android.permission.DUMP 但它在一些新設備上不起作用(它們以“Permission Denial”失敗)。

這可能會給你兩個手機的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();
}   

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM