如何通过代码编程获取设备的 IMEI/ESN 号码但在 android > 6
Posted
技术标签:
【中文标题】如何通过代码编程获取设备的 IMEI/ESN 号码但在 android > 6【英文标题】:How to get device's IMEI/ESN number with code programming But in android > 6 【发布时间】:2017-01-16 01:48:55 【问题描述】:我的 android 版本是 Marshmallow 6.0
如何在 android > 6 中以编程方式查找/获取 imei 号码。
注意:我在 AndroidManifest.xml 文件中添加了 READ_PHONE_STATE 权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
在 MainActivity 内部
TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = manager.getDeviceId();
//Device Id is IMEI number
Log.d("msg", "Device id " + deviceid);
【问题讨论】:
查看此帖:***.com/questions/33078003/… 你遇到了什么错误? 【参考方案1】:我的 Android 版本是 Marshmallow 6.0
注意:您需要运行时权限
我在 AndroidManifest.xml 文件中添加了 READ_PHONE_STATE 权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
在 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);
【讨论】:
【参考方案2】:API 级别 26 中也不推荐使用 getDeviceId() 方法。 因此,您还需要使用 getImei() 或 getAllCellInfo() 来获取 imei 详细信息。
【讨论】:
【参考方案3】:需要权限: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();
如果设备 ID 不可用,则返回 null。
【讨论】:
在复制粘贴答案之前仔细阅读问题以上是关于如何通过代码编程获取设备的 IMEI/ESN 号码但在 android > 6的主要内容,如果未能解决你的问题,请参考以下文章
使用onRequestPermissionsResult以编程方式获取设备IMEI号码android java的最佳方法[重复]