2014-02-13 144 views
3

我正在爲雙卡手機創建一個應用程序。應用程序應能夠檢測用戶通過其撥打電話的SIM卡。它可以是傳出或來電。我試圖使用this tutorial來獲得設備的IMEI號碼。但它爲第二個IMEI號返回null。獲取雙SIM卡android移動設備上的兩個SIM卡插槽的IMEI

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

請提出任何方式來實現這一點。

+0

@Pied派請看這個問題。 – kittu88

+0

好吧,雙卡實現是OEM特定的,設計因供應商而異。您需要使用反射來查找可以返回模擬人數據的確切類。試驗和錯誤是方式 – Neji

+0

[獲取兩個SIM插槽的IMEI在雙SIM Android移動設備] [1] [1]:http://stackoverflow.com/questions/14517338/android-check-whether -the-phone-is-dual-sim/17499889#17499889 – Saravanan

回答

3

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

adb shell dumpsys telephony.registry 

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

adb shell dumpsys telephony.registry2 

mCallState改變了呼入/呼出。它允許您知道哪個SIM卡用於呼叫

當您從Java應用程序調用dumpsys時,您需要清單中的android.permission.DUMP。但它不適用於某些新設備(它們以「權限拒絕」失敗)。

0

這可能會給你兩個雙SIM卡的電話。

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(); 
} 

}

+0

如果試着在android 6.0.it中給我崩潰的錯誤。 – Vasant

相關問題