単一の SIM の場合、次のコードが機能します。
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei= tm.getDeviceId();
デュアルSIMの場合、次のリンクでコードを試しました:
Android : 電話がデュアル SIM であるかどうかを確認します
しかし、それは私にはうまくいきませんでした。
他に可能な解決策があれば教えてください。
単一の SIM の場合、次のコードが機能します。
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei= tm.getDeviceId();
デュアルSIMの場合、次のリンクでコードを試しました:
Android : 電話がデュアル SIM であるかどうかを確認します
しかし、それは私にはうまくいきませんでした。
他に可能な解決策があれば教えてください。
getDeviceId(int slotId)
API レベル 23 で追加されたものを使用してみてください。
サブスクリプションの一意のデバイス ID (GSM の IMEI や CDMA 電話の MEID など) を返します。デバイス ID が利用できない場合は null を返します。
許可が必要です:
READ_PHONE_STATE
各SIMカードのAndroid APIとIMEIを使用して、電話がシングルSIMかデュアルSIMかを確認できます
TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Log.i("OmSai ", "Single or Dula Sim "+manager.getPhoneCount());
Log.i("OmSai ", "Defualt device ID "+manager.getDeviceId());
Log.i("OmSai ", "Single 1 "+manager.getDeviceId(0));
Log.i("OmSai ", "Single 2 "+manager.getDeviceId(1));
TelephonyManager telephony = (TelephonyManager) this.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("getDeviceId", parameter);
Log.d("SimData", getFirstMethod.toString());
Object[] obParameter = new Object[1];
obParameter[0] = 0;
TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String first = (String) getFirstMethod.invoke(telephony, obParameter);
Log.d("SimData", "first :" + first);
obParameter[0] = 1;
String second = (String) getFirstMethod.invoke(telephony, obParameter);
Log.d("SimData", "Second :" + second);
} catch (Exception e) {
e.printStackTrace();
}
これを使用してみてください。これは、Androidロリポップで両方のデバイスIDを取得するのに役立ちます
はい、Android は現在、デュアル Sim をサポートしていません。ただし、Java リフレクションを使用すると、考えられるすべての詳細を取得できます。
私はデュアルSIMの詳細を取得するために研究し、次のデバイスで動作します
Samsung Galaxy Neo
Moto E
Micromax A52
Micromax Canvas
Linovo P780
HTC Dreem
Moto G
LG
HUAWEI Y520-U22
LG-P705
Sony ST26i
上記のモデルからデュアル SIM Detials を正常に取得しました
このメソッドを使用して、両方の imi を取得できます。ご不便をおかけして申し訳ありません。私は急いでいた。
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();
}
}