IMEI的获取

一:创建工具类ImeiUtils

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.telephony.TelephonyManager;public class ImeiUtils {/*** 获取设备Imei号** 注意:获取imei需要动态申请 READ_PHONE_STATE 权限** Android 10 及以上获取不到imei** @param context* @return*/@SuppressLint({"MissingPermission", "HardwareIds"})public static String getImei(Context context) {if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {return null;} else {try {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);String deviceId = telephonyManager.getDeviceId();return deviceId;} catch (Exception e) {return null;}}}
}

二:获取imei

String imei = ImeiUtils.getImei(context);
Log.d("IMEI", "imei:" + imei);

OAID的获取

前言:

该文档只演示了最基础的oaid_sdk的接入和获取,详细的使用说明请查看官方文档。

官方文档下载:TAF移动安全工作委员会

一、申请证书

请至“移动安全联盟”官网申请

链接:TAF移动安全工作委员会

二、下载demo、oaid_sdk_1.1.0.aar 和 supplierconfig.json

链接:https://pan.baidu.com/s/1JE8EJnYGI9gCG-ttyX0XuQ?pwd=zz66

提取码:zz66

三、在工程中接入oaid_sdk_1.1.0

1:在app/src/main下创建assets文件夹(有的话就不需要再创建了)

2:将申请到的证书和supplierconfig.json放入到工程中的assets文件夹

3:将oaid_sdk_1.1.0.aar放入到app/libs文件夹中

4:在app/build.gradle中的dependencies下添加依赖

implementation files("libs/oaid_sdk_1.1.0.aar")

注意:添加完成后,点击右上角的Sync Now(没有的话就不用点,重启一下AndroidStudio也是同样的效果)

5:在app/proguard-rules.pro里面添加混淆配置:

## oaidSdk混淆配置
-keep class com.bun.miitmdid.** { *; }
-keep interface com.bun.supplier.** { *; }
# asus
-keep class com.asus.msa.SupplementaryDID.** { *; }
-keep class com.asus.msa.sdid.** { *; }
# freeme
-keep class com.android.creator.** { *; }
-keep class com.android.msasdk.** { *; }
# huawei
-keep class com.huawei.hms.ads.** { *; }
-keep interface com.huawei.hms.ads.** {*; }
# lenovo
-keep class com.zui.deviceidservice.** { *; }
-keep class com.zui.opendeviceidlibrary.** { *; }
# meizu
-keep class com.meizu.flyme.openidsdk.** { *; }
# nubia
-keep class com.bun.miitmdid.provider.nubia.NubiaIdentityImpl
{ *; }
# oppo
-keep class com.heytap.openid.** { *; }
# samsung
-keep class com.samsung.android.deviceidservice.** { *; }
# vivo
-keep class com.vivo.identifier.** { *; }
# xiaomi
-keep class com.bun.miitmdid.provider.xiaomi.IdentifierManager
{ *; }
# zte
-keep class com.bun.lib.** { *; }
# coolpad
-keep class com.coolpad.deviceidsupport.** { *; }

6:编写获取oaid的代码:

import android.content.Context;
import android.util.Log;
import com.bun.miitmdid.core.MdidSdkHelper;
import com.bun.miitmdid.interfaces.IIdentifierListener;
import com.bun.miitmdid.interfaces.IdSupplier;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class GetOaidObject {private static final String TAG = "GetOaidObject";private static final GetOaidObject instance = new GetOaidObject();private boolean isCertInit = false;  // oaid证书是否初始化private String oaid = null;private GetOaidObject() {}private void setOaid(String oaid) {this.oaid = oaid;}public String getOaid() {return this.oaid;}public static GetOaidObject getInstance() {return instance;}public void initOaidSdk(Context context) {System.loadLibrary("msaoaidsec");  // 加固版本在调用前必须载入SDK安全库// 初始化SDK证书if (!isCertInit) {  // 证书只需初始化一次// 证书为PEM文件中的所有文本内容(包括首尾行、换行符)try {/** 注意!!!!!** 这里的"com.example.oaidtest2.cert.pem"一定要换成你们自己的证书名!证书需要自己到官网上申请!** 证书名的格式是 "你的工程包名.cert.pem"** 移动安全联盟官网地址:http://www.msa-alliance.cn/col.jsp?id=120*/isCertInit = MdidSdkHelper.InitCert(context, loadPemFromAssetFile(context, "com.example.oaidtest2.cert.pem"));} catch (Error e) {e.printStackTrace();}if (!isCertInit) {Log.w(TAG, "getDeviceIds: cert init failed");}}//(可选)设置InitSDK接口回调超时时间(仅适用于接口为异步),默认值为5000ms.// 注:请在调用前设置一次后就不再更改,否则可能导致回调丢失、重复等问题try {MdidSdkHelper.setGlobalTimeout(5000);} catch (Error e) {e.printStackTrace();}int code = 0;code = MdidSdkHelper.InitSdk(context, false, new IIdentifierListener() {@Overridepublic void onSupport(IdSupplier idSupplier) {if (idSupplier== null) {Log.e(TAG, "OAIDManager: supplier == null");} else {Log.d(TAG, "supplier.oaid:"+idSupplier.getOAID());oaid = idSupplier.getOAID();}}});Log.d(TAG, "InitOaidSdk_code:" + code);/** InitOaidSdk_code:** 1008610 调用成功,获取接口是同步的* 1008614 调用成功,获取接口是异步的* 1008616 证书未初始化或证书无效* 1008611 不支持的厂商* 1008612 不支持的设备* 1008613 加载配置文件出错* 1008615 sdk 调用出错*/}/*** 从asset文件读取证书内容** @param context* @param assetFileName* @return 证书字符串*/private static String loadPemFromAssetFile(Context context, String assetFileName) {try {InputStream is = context.getAssets().open(assetFileName);BufferedReader in = new BufferedReader(new InputStreamReader(is));StringBuilder builder = new StringBuilder();String line;while ((line = in.readLine()) != null) {builder.append(line);builder.append('\n');}return builder.toString();} catch (IOException e) {Log.e(TAG, "loadPemFromAssetFile failed");return "";}}
}

7:初始化oaid,建议在APP启动完成后,尽可能早的初始化oaid

// 初始化oaidSdk
GetOaidObject.getInstance().initOaidSdk(this);

8:调用oaid

注意:因为oaid的获取是异步,所以初始化oaid和获取oaid的间隔要尽量大于2秒!

// 调用oaid
String oaid = GetOaidObject.getInstance().getOaid();

Android工程中imei和oaid的获取相关推荐

  1. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  2. android工程中的软件,通过Android Studio创建Android应用程序(附带解析)

    这一节我们主要来创建一个简单的 Android 的应用程序. 创建 HelloWorld 工程 启动 Android Studio,依次选择 File --> New --> New Pr ...

  3. android 友盟统计功能,在Android工程中集成友盟统计

    在Android工程中集成友盟统计 首先需要在友盟官网注册账号并添加新应用,获取Appkey.具体步骤这里不进行叙述. 1.集成准备 首先需要集成友盟统计SDK 有两种方式: 1.下载SDK,并复制到 ...

  4. 在Android工程中,添加ICON资源

    在Android工程中,每添加一个资源,就会在gen目录下的R.java中自动生成一个新的静态整型变量来指向这个资源.程序文件中调用资源的时候,先在R.java中找到变量名,然后根据变量值查找资源. ...

  5. Android工程中添加图片资源

    转载自:http://www.baiyuxiong.com/?p=69 在Android工程中,每添加一个资源,就会在gen目录下的R.java中自动生成一个新的静态整型变量来指向这个资源.程序文件中 ...

  6. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

  7. android工程中让人很不爽的“×××警告”

    一些×××警告 在XML中: 警告信息:[I18N] Hardcoded string "Button" , should use @string resource 意思大概是: ...

  8. 当Android工程中提示你找不到头文件,但你已经设置头文件路径了

    虽然在Android.mk文件中,配置了LOCAL_C_INCLUDES路径,但是工程中的红色叉号一直提示找不到头文件 这时,你在工程树目录中展开Includes项,捣鼓捣鼓,重新build下,或许就 ...

  9. Android工程中R.java文件的重新生成——注意资源文件的错误

    一.如果二或三步骤还是不能生成R.java中内容,一般是XML文件有错,或者xml引用的资源文件找不到,用排除法删除xml后执行二或者三的步骤. 二. 在Android中使用开源代码或者自己开发项目的 ...

最新文章

  1. iOS Socket Client 通讯
  2. web.py使用要点
  3. R语言构建多元线性回归模型
  4. LinkedIn招聘推荐系统中的机器学习的威力
  5. JavaFX——JavaFX概览
  6. C语言开发推箱子游戏项目实战
  7. Java-什么是面向对象
  8. python win32gui安装_python-无法安装win32gui
  9. HTML 网页页面切换的各种变换效果
  10. Linux中常用的目录(/home,/etc ,/opt)
  11. 微信小程序 css边框阴影,微信小程序|CSS的内边距和圆框
  12. 【信道估计】LS/MMSE信道估计,CS信道估计的MATLAB仿真
  13. 按下删除键出现 ^H 乱码现象总结
  14. 免费稳定又好用的微信投票小程序,照片投票评选,视频投票打分小程序
  15. xt.loadOnStartup web应用程序[]中的Servlet[springmvc]引发了load()
  16. java制作纯字rpg小游戏_初学JAVA时编写的rpg文字游戏
  17. windows os x linux比较,windows、Linux与OS X相比,哪个系统更适合写代码?
  18. SQLServer 自定义函数 日期计算月初/月末/年初/年末/季初/季末
  19. 工业交换机的单模多模是什么意思?
  20. 行走的Offer收割机,首次公布Java10W字面经,Github访问量破百万

热门文章

  1. linux3.4.2 触摸屏驱动
  2. mall订单模块的业务学习
  3. 恋爱周年纪念日-送给女友的网页
  4. 【数论知识】能被2、3、4、5、6、7、8、9 等数整除的数的特征
  5. windows php gd 支持,windows服务器开启php的gd库方法
  6. 图像处理 | 空间域与频率域滤波
  7. python使用ddt_python-ddt模块使用
  8. ReactNative从相册选取二维码 进行扫描识别、扫描条形码、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
  9. LQ0052 冰雹数【枚举+角谷猜想】
  10. 汇编与接口技术课程总结1——汇编程序debug调试