为了唯一地识别每个设备,我想使用IMEI(或CDMA设备的ESN号)。如何以编程方式访问它?
当前回答
来自:http://mytechead.wordpress.com/2011/08/28/how-to-get-imei-number-of-android-device/:
下面的代码可以帮助获取android设备的IMEI号码:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String device_id = tm.getDeviceId();
Android Manifest中需要的权限:
android.permission.READ_PHONE_STATE
注意:如平板电脑或不能作为移动电话的设备 IMEI将为空。
其他回答
你需要调用android.telephony.TelephonyManager.getDeviceId()。
这将返回唯一标识该设备的字符串(GSM上的IMEI, CDMA上的MEID)。
你需要在AndroidManifest.xml中设置以下权限:
< uses-permission android: name = " android.permission。READ_PHONE_STATE " / >
为了做到这一点。
话虽如此,做这件事要小心。用户不仅会想知道为什么您的应用程序要访问他们的电话堆栈,而且如果用户获得了新设备,可能很难迁移数据。
更新:正如下面评论中提到的,这不是一种安全的认证用户的方式,并引起了隐私问题。不建议使用。相反,如果您想实现一个无障碍的登录系统,请查看谷歌+ Login API。
如果你只是想在用户重置手机(或购买新设备)时以一种轻量级的方式持久化一束字符串,Android Backup API也是可用的。
你需要在AndroidManifest.xml中设置以下权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
要获得IMEI(国际移动设备标识符),如果它高于API级别26,那么我们将telephonyManager.getImei()作为null,因此,我们使用ANDROID_ID作为唯一标识符。
public static String getIMEINumber(@NonNull final Context context)
throws SecurityException, NullPointerException {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imei;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
assert tm != null;
imei = tm.getImei();
//this change is for Android 10 as per security concern it will not provide the imei number.
if (imei == null) {
imei = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
}
} else {
assert tm != null;
if (tm.getDeviceId() != null && !tm.getDeviceId().equals("000000000000000")) {
imei = tm.getDeviceId();
} else {
imei = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
}
}
return imei;
}
除了Trevor Johns的回答外,你还可以这样使用:
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();
并且您应该在Manifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
在模拟器中,你可能会得到一个“00000…”的值。如果设备ID不可用,getDeviceId()返回NULL。
使用下面的代码给你IMEI号码:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
System.out.println("IMEI::" + telephonyManager.getDeviceId());
方法getDeviceId()已弃用。 这里有一个getImei(int)的新方法
检查在这里
推荐文章
- 改变开关的“开”色
- 以编程方式将EditText的输入类型从PASSWORD更改为NORMAL,反之亦然
- 如何在隐藏和查看密码之间切换
- 在Android上调整一个大的位图文件到缩放输出文件
- 如何更改Android版本和代码版本号?
- Android Studio突然无法解析符号
- 应用程序重新启动而不是恢复
- 如何设置整个应用程序在纵向模式?
- Android中文本的阴影效果?
- 以编程方式设置TextView的布局权重
- Android -如何覆盖“后退”按钮,所以它不完成()我的活动?
- 如何从通知点击发送参数到一个活动?
- 导航目标xxx对于这个NavController是未知的
- 使用ConstraintLayout均匀间距的视图
- 文件google-services错误。模块根文件夹中缺少Json。谷歌服务插件没有它就不能正常工作。