2014-02-13 9 views
3

Я создаю приложение для мобильных телефонов с двумя сим-телефонами. Приложение должно иметь возможность обнаруживать sim, через который пользователь совершает вызов. Это может быть исходящий или входящий вызов. Я попытался получить оба IMEI-устройства устройства, используя this tutorial. Но он возвращает null для второго IMEI no.Получите IMEI обоих слотов sim в двух мобильных телефонах Android Android

Любые способы определения того, какой сим пользователь использует при создании или получении вызова.

Просьба предложить любой способ достижения этого.

+0

@Pied Пайпер, пожалуйста, посмотрите на этот вопрос. – kittu88

+0

ну, двойная реализация sim - это OEM, и дизайн варьируется от поставщика к поставщику. Вам нужно использовать отражение, чтобы найти точный класс, который может вернуть вам данные симов. Метод проб и ошибок способ – Neji

+0

[Получить IMEI обоих SIM-слотов в Dual SIM андроид мобильных устройств] [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-карта используется для звонка

Когда вы вызываете dumpsys из Java-приложения, вам нужно android.permission.DUMP в манифесте. Но это не работает на некоторых новых устройствах (они не работают с «Permission Denial»).

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

}

+0

, если попробовать в android 6.0.it дать мне ошибку. – Vasant