Reputation: 189
For single SIM following code works:
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei= tm.getDeviceId();
For dual SIM I tried code on following link:
Android : Check whether the phone is dual SIM
But it didnt work for me.
Let me know if any other solutions possible.
Upvotes: 15
Views: 49670
Reputation: 1
TelephonyInfo telephonyInfo = TelephonyInfo.getInstance(this);
String imeiSIM1 = telephonyInfo.getImsiSIM1();
String imeiSIM2 = telephonyInfo.getImsiSIM2();
boolean isSIM1Ready = telephonyInfo.isSIM1Ready();
boolean isSIM2Ready = telephonyInfo.isSIM2Ready();
boolean isDualSIM = telephonyInfo.isDualSIM();
TextView tv = (TextView) findViewById(R.id.txt_imei);
tv.setText(" IME1 : " + imeiSIM1 + "\n" +
" IME2 : " + imeiSIM2 + "\n" +
" IS DUAL SIM : " + isDualSIM + "\n" +
" IS SIM1 READY : " + isSIM1Ready + "\n" +
" IS SIM2 READY : " + isSIM2Ready + "\n");
}
Upvotes: 0
Reputation: 71
Try following code to get IMEI Number for an Android Device:
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());
}
});
Upvotes: 0
Reputation: 546
Steps: 1 > You must have READ_PHONE_STATE Permission enabled
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2 > For Android SDK v23<= get SIM 1 & SIM 2 IMEI by this:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Log.e("IMEI---1:", tm.getDeviceId(0) );
Log.e("IMEI---2:", tm.getDeviceId(1) );
Upvotes: 0
Reputation: 515
You can IMEI in Android O or above.
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));
}
Upvotes: 0
Reputation: 11
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());
Upvotes: 1
Reputation: 11
Yes we can get both IMEI numbers Using this below code
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String imeiNumber1 = tm.getDeviceId(1); //(API level 23)
String imeiNumber2 = tm.getDeviceId(2);
Upvotes: 1
Reputation: 788
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();
}
try using this,this should help getting both device id on android lollipop
Upvotes: 1
Reputation: 1
You can use this method to get both imei. Sorry for inconvenience. I was in a hurry.
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();
}
}
Upvotes: 0
Reputation: 28697
Try using getDeviceId(int slotId)
added in API level 23.
Returns the unique device ID of a subscription, for example, the IMEI for GSM and the MEID for CDMA phones. Return null if device ID is not available.
Requires Permission:
READ_PHONE_STATE
Upvotes: 6
Reputation: 77
We can check whether phone single or dual sim by using Android API and IMEI for each sim Card
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));
Upvotes: 5
Reputation: 292
Yes Android currently not supported Dual Sim. But you can retrive all possible details by using Java reflection.
I research for fetching dual SIMs details and it works on bellowed devices
Samsung Galaxy Neo
Moto E
Micromax A52
Micromax Canvas
Linovo P780
HTC Dreem
Moto G
LG
HUAWEI Y520-U22
LG-P705
Sony ST26i
I successfully get dual SIM Detials from above models
Upvotes: 0
Reputation: 11141
AFAIK it is not possible. The java reflection, you used could work for some devices but not all. However there might be some manufacturer specific API's that allows for this.
Quoting Commonsware,
Android does not support multiple SIMs, at least from the SDK. Device manufacturers who have created multi-SIM devices are doing so on their own. You are welcome to contact your device manufacturer and see if they have an SDK add-on or something that allows you to access the second SIM.
Upvotes: 0