以编程方式检索android中双SIM卡的IMEI号码

以编程方式检索android中双SIM卡的IMEI号码,android,imei,dual-sim,Android,Imei,Dual Sim,对于单SIM卡,以下代码有效: TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String imei= tm.getDeviceId(); 对于双SIM卡,我尝试了以下链接上的代码: 但这对我不起作用 如果有其他可能的解决方案,请告诉我。如果不可能的话。您使用的java反射可以用于某些设备,但不能用于所有设备。然而,可能有一些特定于制造商的API允许这样做 引用 Android不支持多

对于单SIM卡,以下代码有效:

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei= tm.getDeviceId();
对于双SIM卡,我尝试了以下链接上的代码:

但这对我不起作用


如果有其他可能的解决方案,请告诉我。

如果不可能的话。您使用的java反射可以用于某些设备,但不能用于所有设备。然而,可能有一些特定于制造商的API允许这样做

引用

Android不支持多个SIM卡,至少在SDK中是这样。装置 生产多SIM卡设备的制造商正在他们的电脑上进行生产 拥有欢迎您联系您的设备制造商,看看是否 他们有一个SDK附加组件或允许您访问 第二个SIM卡


是,Android当前不支持双Sim卡。但是您可以通过使用Java反射来检索所有可能的细节

我研究获取双模拟人生的细节,它在吼叫设备上工作
三星Galaxy Neo
摩托E
Micromax A52
Micromax帆布
利诺沃P780
HTC德雷姆
摩托G
LG
华为Y520-U22
LG-P705
索尼ST26i

我成功地从上述型号中获取了双SIM数据

我们可以使用Android API和IMEI为每个SIM卡检查手机是单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中添加的

返回订阅的唯一设备ID,例如IMEI 适用于GSM和CDMA手机的MEID。如果设备ID不为空,则返回null 可用

需要权限:
READ\u PHONE\u STATE


您可以使用此方法获取两个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();
    }   
}
公共静态无效samsungTwoSims(上下文){
TelephonyManager telephony=(TelephonyManager)context.getSystemService(context.telephony_服务);
试一试{
类telephonyClass=Class.forName(telephony.getClass().getName());
Class[]参数=新类[1];
参数[0]=int.class;
方法getFirstMethod=telephonyClass.getMethod(“getDefault”,参数);
Log.d(标记,getFirstMethod.toString());
Object[]对象参数=新对象[1];
obParameter[0]=0;
TelephonyManager first=(TelephonyManager)getFirstMethod.invoke(null,obParameter);
Log.d(标记,“设备Id:+first.getDeviceId()+”,设备状态:“+first.getSimState()+”,运算符:“+first.getNetworkOperator()+”/“+first.getNetworkOperatorName());
对象参数[0]=1;
TelephonyManager second=(TelephonyManager)getFirstMethod.invoke(null,obParameter);
Log.d(标记,“设备Id:+second.getDeviceId()+”,设备状态:“+second.getSimState()+”,运算符:“+second.getNetworkOperator()+”/“+second.getNetworkOperatorName());
}捕获(例外e){
e、 printStackTrace();
}   
}
TelephonyManager telephony=(TelephonyManager)this.getSystemService(Context.telephony_服务);
试一试{
类telephonyClass=Class.forName(telephony.getClass().getName());
Class[]参数=新类[1];
参数[0]=int.class;
方法getFirstMethod=telephonyClass.getMethod(“getDeviceId”,参数);
Log.d(“SimData”,getFirstMethod.toString());
Object[]对象参数=新对象[1];
obParameter[0]=0;
TelephonyManager=(TelephonyManager)this.getSystemService(Context.TELEPHONY_服务);
String first=(String)getFirstMethod.invoke(电话,obParameter);
Log.d(“SimData”,“first:+first”);
对象参数[0]=1;
stringsecond=(String)getFirstMethod.invoke(电话,obParameter);
Log.d(“SimData”,“Second:+Second”);
}捕获(例外e){
e、 printStackTrace();
}

试着使用这个,这将有助于在android棒棒糖上获取两个设备id是的,我们可以使用下面的代码获取两个IMEI号码

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String imeiNumber1 = tm.getDeviceId(1); //(API level 23)   
String imeiNumber2 = tm.getDeviceId(2);

您可以在Android O或更高版本中使用IMEI

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));
}
Set deviceIdList=new HashSet();
TelephonyManager TelephonyManager=(TelephonyManager)context.getSystemService(context.TELEPHONY_服务);
int phoneCount=telephonyManager.getPhoneCount();
for(int i=0;i
步骤: 1>您必须已启用读取\电话\状态权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

尝试以下代码获取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());
        }
    });
telephonyManager=(telephonyManager)this.getSystemService(Context.TELEPHONY_服务);
btn_imei.setOnClickListener(新视图.OnClickListener(){
@RequiresApi(api=Build.VERSION\u CODES.O)
@凌驾
公共void onClick(视图v){
if(ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ\u PHONE\u STATE)!=PackageManager.permission\u provided)
{
ActivityCompat.requestPermissions(MainActivity.this,新字符串[]{Manifest.permission.READ_PHONE_STATE},请求代码);
返回;
}
StringBuilder StringBuilder=新的StringBuilder();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.M){
对于(int i=0;i
TelephonyInfo TelephonyInfo=TelephonyInfo.getInstance(this)


看看这个链接,看看你的目标是哪个API版本?我也在开发一个双SIM卡应用程序,它需要在非常旧的手机和新的手机上运行。这是用于Android 23+,正如在Android SDK中提到的,您正在寻找哪个版本。我正在寻找API 15+getPhoneCount()方法不可用SubscriptionManager是一个类,您可以在其中获取android 5.1以上的所有单元格信息。您是否可以使用反射获取SIM卡运营商/运营商名称?假设我必须创建联系人程序
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    Log.e("IMEI---1:", tm.getDeviceId(0) );
    Log.e("IMEI---2:", tm.getDeviceId(1) );
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());
        }
    });
    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");

}