我正在爲雙卡手機創建一個應用程序。應用程序應能夠檢測用戶通過其撥打電話的SIM卡。它可以是傳出或來電。我試圖使用this tutorial來獲得設備的IMEI號碼。但它爲第二個IMEI號返回null。獲取雙SIM卡android移動設備上的兩個SIM卡插槽的IMEI
任何如何檢測用戶在撥打或接聽電話時使用的SIM卡。
請提出任何方式來實現這一點。
我正在爲雙卡手機創建一個應用程序。應用程序應能夠檢測用戶通過其撥打電話的SIM卡。它可以是傳出或來電。我試圖使用this tutorial來獲得設備的IMEI號碼。但它爲第二個IMEI號返回null。獲取雙SIM卡android移動設備上的兩個SIM卡插槽的IMEI
任何如何檢測用戶在撥打或接聽電話時使用的SIM卡。
請提出任何方式來實現這一點。
要查看SIM1類型的狀態在控制檯:
adb shell dumpsys telephony.registry
要查看在控制檯SIM2類型的狀態:
adb shell dumpsys telephony.registry2
mCallState
改變了呼入/呼出。它允許您知道哪個SIM卡用於呼叫
當您從Java應用程序調用dumpsys
時,您需要清單中的android.permission.DUMP
。但它不適用於某些新設備(它們以「權限拒絕」失敗)。
這可能會給你兩個雙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();
}
}
如果試着在android 6.0.it中給我崩潰的錯誤。 – Vasant
@Pied派請看這個問題。 – kittu88
好吧,雙卡實現是OEM特定的,設計因供應商而異。您需要使用反射來查找可以返回模擬人數據的確切類。試驗和錯誤是方式 – Neji
[獲取兩個SIM插槽的IMEI在雙SIM Android移動設備] [1] [1]:http://stackoverflow.com/questions/14517338/android-check-whether -the-phone-is-dual-sim/17499889#17499889 – Saravanan