安卓设备获取唯一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

相关推荐
貂蝉空大1 小时前
uni-app开发安卓和ios app 真机调试
android·ios·uni-app
少年芒1 小时前
Leetcode 490 迷宫
android·算法·leetcode
IT猿手2 小时前
2025最新智能优化算法:鲸鱼迁徙算法(Whale Migration Algorithm,WMA)求解23个经典函数测试集,MATLAB
android·数据库·人工智能·算法·机器学习·matlab·无人机
兰琛3 小时前
12.1 Android中协程的基本使用
android
liujingtech5 小时前
Kotlin实践下来 takeIf 并不是所有场景的银弹
android
xvch5 小时前
Kotlin 2.1.0 入门教程(二十三)泛型、泛型约束、协变、逆变、不变
android·kotlin
ianozo6 小时前
BUU40 [安洵杯 2019]easy_serialize_php
android·开发语言·php
abs6257 小时前
uniapp使用uts插件启动原生安卓Service
android·uni-app·uniapp uts插件·uniapp 安卓服务
Evaporator Core7 小时前
MATLAB在投资组合优化中的应用:从基础理论到实践
android
Neo Evolution8 小时前
Flutter与移动开发的未来:谷歌的技术愿景与实现路径
android·人工智能·学习·ios·前端框架·webview·着色器