简体   繁体   English

如何使用代码编程获取设备的IMEI / ESN号但是在android> 6中

[英]How to get device's IMEI/ESN number with code programming But in android > 6

My Android version is Marshmallow 6.0 我的Android版本是Marshmallow 6.0

How to Find / Get imei number in android > 6 programmatically. 如何以编程方式在android> 6中查找/获取imei编号。

Note : I added READ_PHONE_STATE permission inside AndroidManifest.xml file. 注意:我在AndroidManifest.xml文件中添加了READ_PHONE_STATE权限。

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

And inside MainActivity 并且在MainActivity中

TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = manager.getDeviceId();

//Device Id is IMEI number

Log.d("msg", "Device id " + deviceid);

My Android version is Marshmallow 6.0 我的Android版本是Marshmallow 6.0

Note : You need Runtime Permissions 注意:您需要运行时权限

I added READ_PHONE_STATE permission inside AndroidManifest.xml file. 我在AndroidManifest.xml文件中添加了READ_PHONE_STATE权限。

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

in MainActivity: 在MainActivity中:

private static final int PERMISSIONS_REQUEST_READ_PHONE_STATE = 999;

private TelephonyManager mTelephonyManager;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
            != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE},
                PERMISSIONS_REQUEST_READ_PHONE_STATE);
    } else {
        getDeviceImei();
    }
....

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                       int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST_READ_PHONE_STATE
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        getDeviceImei();
    }
}

private void getDeviceImei() {

    mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    String deviceid = mTelephonyManager.getDeviceId();
    Log.d("msg", "DeviceImei " + deviceid);
}

此外,在API级别26中不推荐使用getDeviceId()方法。因此,您还需要使用getImei()或getAllCellInfo()来获取imei详细信息。

Requires Permission: READ_PHONE_STATE 需要权限:READ_PHONE_STATE

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

/**
 * Gets the device unique id called IMEI. Sometimes, this returns 00000000000000000 for the
 * rooted devices.
 **/
public static String getDeviceImei(Context ctx) {
    TelephonyManager telephonyManager = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
    Log.i(Tag, "Return Sim count in device : "+manager.getPhoneCount());
    Log.i(Tag, "Defualt device ID: "+manager.getDeviceId());
    Log.i(Tag, "First Sim IMEI:  "+manager.getDeviceId(0));
    Log.i(Tag, "Secand Sim IMEI "+manager.getDeviceId(1));
    return telephonyManager.getDeviceId();
}

Return null if device ID is not available. 如果设备ID不可用,则返回null。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM