首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

在Android中如何获取当前设备的ID

  • 25-03-07 23:04
  • 2027
  • 9974
blog.csdn.net

目录

1. 使用 Build.SERIAL (适用于 Android 8.0 及以下)

2. 使用 Settings.Secure 获取 ANDROID_ID (适用于 Android 2.3 及以上)

3. 使用 TelephonyManager 获取设备的 IMEI (仅适用于带有电话功能的设备,且需要权限)

权限:

4. 获取设备的唯一 ID 示例代码(集成多个方法)

代码说明:

注意事项:

输出结果:


1. 使用 Build.SERIAL (适用于 Android 8.0 及以下)

  1. // 获取设备的序列号
  2. String deviceSerial = Build.SERIAL;

2. 使用 Settings.Secure 获取 ANDROID_ID (适用于 Android 2.3 及以上)

  1. // 获取 ANDROID_ID,通常唯一,但有时会被重置
  2. String androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);

3. 使用 TelephonyManager 获取设备的 IMEI (仅适用于带有电话功能的设备,且需要权限)

在 Android 6.0 及以上,需要动态请求权限。

权限:

在 AndroidManifest.xml 中声明权限:

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

请求动态权限:

  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  2. if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
  3. requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
  4. }
  5. }

获取 IMEI:

  1. // 获取 TelephonyManager 实例
  2. TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  3. // 检查权限
  4. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
  5. // 获取 IMEI 号码 (Android 10 及以上不推荐使用)
  6. String imei = telephonyManager.getDeviceId();
  7. }

4. 获取设备的唯一 ID 示例代码(集成多个方法)

以下是获取设备唯一ID的完整示例代码,结合了 ANDROID_ID、Build.SERIAL 和 TelephonyManager:

  1. import android.Manifest;
  2. import android.content.Context;
  3. import android.content.pm.PackageManager;
  4. import android.os.Build;
  5. import android.provider.Settings;
  6. import android.telephony.TelephonyManager;
  7. import android.util.Log;
  8. import androidx.core.app.ActivityCompat;
  9. public class DeviceIdHelper {
  10. // 获取设备唯一ID的主方法
  11. public static String getDeviceId(Context context) {
  12. String deviceId = null;
  13. // 优先使用 ANDROID_ID
  14. deviceId = getAndroidId(context);
  15. if (deviceId != null && !deviceId.isEmpty()) {
  16. Log.d("DeviceIdHelper", "ANDROID_ID: " + deviceId);
  17. return deviceId;
  18. }
  19. // 如果 ANDROID_ID 不可用,使用序列号
  20. if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) {
  21. deviceId = getDeviceSerial();
  22. if (deviceId != null && !deviceId.isEmpty()) {
  23. Log.d("DeviceIdHelper", "SERIAL: " + deviceId);
  24. return deviceId;
  25. }
  26. }
  27. // 尝试使用 IMEI (需要 READ_PHONE_STATE 权限)
  28. if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
  29. deviceId = getIMEI(context);
  30. if (deviceId != null && !deviceId.isEmpty()) {
  31. Log.d("DeviceIdHelper", "IMEI: " + deviceId);
  32. return deviceId;
  33. }
  34. }
  35. Log.d("DeviceIdHelper", "设备ID获取失败");
  36. return "Unknown";
  37. }
  38. // 获取 ANDROID_ID
  39. private static String getAndroidId(Context context) {
  40. return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
  41. }
  42. // 获取设备序列号 (适用于 Android 8.0 及以下)
  43. private static String getDeviceSerial() {
  44. if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) {
  45. return Build.SERIAL;
  46. } else {
  47. return Build.getSerial();
  48. }
  49. }
  50. // 获取 IMEI 号码 (仅在电话功能设备上有效)
  51. private static String getIMEI(Context context) {
  52. TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
  53. if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
  54. return telephonyManager.getDeviceId();
  55. }
  56. return null;
  57. }
  58. }

代码说明:

  1. getAndroidId():这是最常用的方法,返回设备的 ANDROID_ID,它通常是唯一的,但某些设备在重置后可能会更改。
  2. getDeviceSerial():获取设备的序列号,适用于 Android 8.0 及以下。Android 9.0 后谷歌不推荐使用序列号作为唯一标识。
  3. getIMEI():通过 TelephonyManager 获取设备的 IMEI 号码,需要权限,适用于有电话功能的设备。
  4. 权限管理:代码中包含了动态权限请求的部分,确保在 Android 6.0 及以上版本获取 IMEI 时不会崩溃。

注意事项:

  • 从 Android 10 开始,获取设备的 IMEI 和序列号已被限制,应用程序无法再使用 TelephonyManager.getDeviceId() 和 Build.getSerial() 获取这些信息。APP 开发者通常使用 ANDROID_ID 作为设备的唯一标识符。
  • 权限获取是必要的,对于 IMEI 这样的敏感信息,需要在应用的运行时动态请求权限。

输出结果:

根据设备情况,调用 getDeviceId() 方法会返回:

  • ANDROID_ID(优先使用)。
  • 序列号(如果适用)。
  • IMEI(如果有权限且设备支持)。
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览153117 人正在系统学习中
注:本文转载自blog.csdn.net的西瓜本瓜@的文章"https://blog.csdn.net/LLZjiayou/article/details/141431013"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

105
移动开发
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top