Android开发新手获取设备IMEI遇权限问题求解决方案
解决Android获取IMEI的权限问题
首先得明确:从Android 10(API 29)开始,普通应用已经无法获取IMEI了,android.permission.READ_PRIVILEGED_PHONE_STATE是系统应用或拥有特殊系统权限的应用才能申请的,普通APP根本拿不到这个权限,别在这个权限上浪费时间。
给你几个实用的替代方案:
用
Android ID做设备标识:这个不需要任何特殊权限,代码示例如下:import android.provider.Settings; String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);这个ID在设备重启后不会改变,只有恢复出厂设置才会重置。
生成自定义UUID:首次启动APP时生成一个UUID,存在
SharedPreferences或者本地文件里,之后每次启动都读取这个值。代码示例:import java.util.UUID; import android.content.SharedPreferences; // 生成并保存UUID SharedPreferences sp = getSharedPreferences("device_info", MODE_PRIVATE); String deviceId = sp.getString("device_id", null); if (deviceId == null) { deviceId = UUID.randomUUID().toString(); sp.edit().putString("device_id", deviceId).apply(); }缺点是卸载重装APP后,这个ID会重新生成。
兼容旧版本(Android 9及以下):如果你的APP需要支持Android 9(API 28)及更低版本,可以申请
READ_PHONE_STATE权限,动态申请后调用getImei(),但注意Android 10+调用这个方法会返回null或者抛出SecurityException。
内容的提问来源于stack exchange,提问作者Thomas Dulcamara
相关产品推荐
相关产品推荐

