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

瑞星  金牌会员 | 2024-10-28 14:04:57 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 990|帖子 990|积分 2970

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
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 中声明权限:
  1. <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. }
复制代码
代码阐明:


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



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

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


  • ANDROID_ID(优先使用)。
  • 序列号(如果适用)。
  • IMEI(如果有权限且装备支持)。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表