シングルSIMの場合、次のコードが機能します。
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei= tm.getDeviceId();
デュアルSIMの場合、私は次のリンクでコードを試しました:
Android:スマートフォンがデュアル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));
APIレベル23で追加された getDeviceId(int slotId)
を使用してみてください。
サブスクリプションの一意のデバイスID(GSMのIMEI、CDMA電話のMEIDなど)を返します。デバイスIDが利用できない場合はnullを返します。
権限が必要です:
READ_PHONE_STATE
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());
はい、次のコードを使用して両方のIMEI番号を取得できます
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String imeiNumber1 = tm.getDeviceId(1); //(API level 23)
String imeiNumber2 = tm.getDeviceId(2);
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 Lollipopで両方のデバイスIDを取得するのに役立ちます
AndroidデバイスのIMEI番号を取得するには、次のコードを試してください:
telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
btn_imei.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onClick(View v) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE);
return;
}
StringBuilder stringBuilder = new StringBuilder();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i < telephonyManager.getPhoneCount(); i++) {
stringBuilder.append(telephonyManager.getImei(i));
stringBuilder.append("\n");
}
}
txt_imei.setText(stringBuilder.toString());
}
});
手順:1> READ_PHONE_STATE権限を有効にする必要があります
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
2> Android SDK v23 <=の場合、これによりSIM 1およびSIM 2 IMEIを取得します。
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Log.e("IMEI---1:", tm.getDeviceId(0) );
Log.e("IMEI---2:", tm.getDeviceId(1) );
このメソッドを使用して両方の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();
}
}
IMEIは、Android O以上で可能です。
Set<String> deviceIdList = new HashSet<>();
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int phoneCount = telephonyManager.getPhoneCount();
for (int i = 0; i < phoneCount; i++) {
deviceIdList.add(telephonyManager.getImei(i));
}
私の知る限り、それは不可能です。 Javaリフレクション。使用したデバイスによっては、一部のデバイスでは機能しない場合があります。ただし、これを可能にするメーカー固有のAPIがいくつかある場合があります。
引用 Commonsware 、
Androidは、少なくともSDKからの複数のSIMをサポートしていません。マルチSIMデバイスを作成したデバイスメーカーは、独自に作成しています。デバイスの製造元に連絡して、SDKアドオンまたは2番目のSIMにアクセスできるものがあるかどうかを確認してください。
はいAndroid現在、Dual Simはサポートされていません。しかし、Javaリフレクションを使用することにより、すべての可能な詳細を取得できます。
デュアルSIMの詳細を取得するために調査しましたが、以下のデバイスで機能します
サムスンギャラクシーネオ
モトE
マイクロマックスA52
マイクロマックスキャンバス
Linovo P780
HTC Dreem
モトG
LG
HUAWEI Y520-U22
LG-P705
ソニーST26i
上記のモデルからデュアルSIMデバイスを正常に取得しました