安卓设备获取唯一id解决方案

安卓设备获取唯一id解决方案

最近碰到一个需求,需要拿到安卓设备的唯一识别码,然后用于推送,这个码必须唯一,且不能变动,比如卸载软件,或者清除数据 ,也必须保证设备码不变

效果图:上面的图是第一次运行,打印的值,下面的图是卸载后重新运行打印的值

step1: 引用依赖

bash 复制代码
   implementation 'com.github.gzu-liyujiang:Android_CN_OAID:4.2.4'

step2:清单权限

html 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.iosdialogdemo">

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

    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!--ZXING END-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />


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


    <!--esp touch-->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

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

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <!--对讲权限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />

    <!--检测网络状态权限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.IosDialogDemo">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

step3: 全局初始化

java 复制代码
package com.example.iosdialogdemo;


import android.app.Application;
import android.content.Context;

import com.github.gzuliyujiang.oaid.DeviceIdentifier;


/**
 * 参考源码:https://github.com/gzu-liyujiang/Android_CN_OAID.git
 */

public class MyApplication extends Application{
    public static Context app;

    @Override
    public void onCreate() {
        super.onCreate();
        app=getApplicationContext();

        DeviceIdentifier.register(this);
    }
}

step4: 调用方法,拿到设备码

java 复制代码
package com.example.iosdialogdemo;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.github.gzuliyujiang.oaid.DeviceID;
import com.github.gzuliyujiang.oaid.DeviceIdentifier;
import com.github.gzuliyujiang.oaid.IGetter;

public class MainActivity extends Activity {

    private MainActivity selfActivity = MainActivity.this;

    private HintDialog hintDialog = new HintDialog(); // 提示框
    private HintDialog singleHintDialog = new HintDialog(); // 单个提示框
    private PhotoDialog photoDialog = new PhotoDialog(); // 拍照 选择相册

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

        // 获取IMEI,只支持Android 10之前的系统,需要READ_PHONE_STATE权限,可能为空
        String a = DeviceIdentifier.getIMEI(this);
        Log.e("TAG", "获取IMEI:" + a);


        // 获取安卓ID,可能为空
        String b = DeviceIdentifier.getAndroidID(this);
        Log.e("TAG", "获取AndroidID:" + b);


        // 获取数字版权管理ID,可能为空。很鸡肋,在某些手机上还可能造成卡死或闪退,自4.2.7版本后已弃用
        String c = DeviceIdentifier.getWidevineID();
        Log.e("TAG", "获取WidevineID:" + c);


        // 获取伪造ID,根据硬件信息生成,不会为空,有大概率会重复
        String d = DeviceIdentifier.getPseudoID();
        Log.e("TAG", "获取PseudoID:" + d);


        // 获取GUID,随机生成,不会为空
        String e = DeviceIdentifier.getGUID(this);
        Log.e("TAG", "获取GUID:" + e);


        // 是否支持OAID/AAID
        boolean f = DeviceID.supportedOAID(this);
        Log.e("TAG", "是否支持OAID/AAID:" + f);


        // 获取OAID/AAID,同步调用
        String g = DeviceIdentifier.getOAID(this);
        Log.e("TAG", "OAID/AAID:" + g);


        // 获取OAID/AAID,异步回调
        DeviceID.getOAID(this, new IGetter() {
            @Override
            public void onOAIDGetComplete(String result) {
                // 不同厂商的OAID/AAID格式是不一样的,可进行MD5、SHA1之类的哈希运算统一
                Log.e("TAG", "onOAIDGetComplete:" + result);
            }

            @Override
            public void onOAIDGetError(Exception error) {
                // 获取OAID/AAID失败
            }
        });

    }
}

end

相关推荐
李堇2 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly3 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者86 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20356 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥6 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓7 小时前
[JDBC]元数据
android
独行soc7 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能7 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿7 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc8 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮