如何在 Android 13 中获取设备唯一标识符

Android 13 引入了新的隐私保护机制,其中包括对设备唯一标识符(如 IMEI 和 MAC 地址)的限制。在这篇文章中,我将指导你如何在 Android 13 中安全地生成和使用唯一标识符。

流程概览

下面是实现设备唯一标识符的总体流程:

步骤 描述 代码段
1 创建 Android 项目 N/A
2 添加权限并声明依赖 AndroidManifest.xml
3 生成唯一标识符 MainActivity.java
4 处理 API 级别 MainActivity.java

步骤详细说明

第一步:创建 Android 项目

在 Android Studio 中创建一个新的项目,选择 "Empty Activity" 模板。 点击完成后,进入项目结构。

第二步:添加权限并声明依赖

打开 AndroidManifest.xml,添加以下权限和依赖:

<manifest xmlns:android="
    package="com.example.uniqueidentifier">

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

    <application
        ...
    </application>
</manifest>
说明:
  • ACCESS_FINE_LOCATION 用于获取带有定位功能的唯一标识符。
  • READ_PHONE_STATE 需要在特定情况下获取 IMEI 等信息。

第三步:生成唯一标识符

MainActivity.java 中,使用以下代码生成唯一标识符:

import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String uniqueID = getUniqueID(this);
        Toast.makeText(this, uniqueID, Toast.LENGTH_LONG).show();
    }

    private String getUniqueID(Context context) {
        return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }
}
说明:
  • Settings.Secure.ANDROID_ID 是一个 64 位的随机数,可以在设备恢复出厂设置后更改,是最常用的唯一标识。
  • getUniqueID 方法获取设备的唯一 ID。

第四步:处理 API 级别

你可能需要根据 Android 版本来做不同的处理。例如,针对不同的 API 级别,你可能需要:

import android.os.Build;

private String getIMEI() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        // 需要用户同意, 通过TelephonyManager获取IMEI
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String imei = telephonyManager.getImei();
        return imei;
    }
    // 处理旧版
    // Return some other identifier
}
说明:
  • 在 Android 8.0 及以上,你需要请求权限才能获取 IMEI,确保你已经获得了用户的同意。

整体流程图

sequenceDiagram
    participant User
    participant AndroidApp
    participant Device

    User->>AndroidApp: Launch App
    AndroidApp->>Device: Request Unique ID
    Device->>AndroidApp: Provide ID (Settings.Secure.ANDROID_ID)
    AndroidApp->>User: Show Unique ID

结论

在 Android 13 中,确保安全地获得设备唯一标识符是非常重要的。我们通过获取 Settings.Secure.ANDROID_ID 来实现。同时,掌握识别权限及不同 API 级别的处理对于开发者来说尤为重要。希望通过这篇文章,你能够轻松实现设备唯一标识符的获取,吸收并掌握关键概念和代码,迈出开发的第一步!