[高通SDM450][Android 9.0] 虹软人脸识别因IMEI变化导致授权失败

虹软人脸识别因IMEI变化导致授权失败

开发平台基本信息

芯片: 高通SDM450
版本: Android 9.0
kernel: msm-4.9

补丁下载地址

https://gitee.com/Hebin320/csdn_patch

前言

在人脸识别终端上,使用人脸识别算法软件进行授权,使得终端具有人脸识别的能力;目前我们的设备接入的人脸识别算法有虹软以及旷视;这两家公司在算法绑定设备的方式上大同小异,都是通过Android标准的api获取到设备的一些硬件信息,例如wifi的mac地址,以太网的mac地址以及IMEI等等;然后将获取的硬件信息传到他们的平台上进行绑定,如果已授权的机器的硬件信息发生改变,那么算法授权就会失效,解决办法就是,要么将硬件信息恢复到授权时候的信息;要么重新授权,而重新授权一个授权码要一百多;所以,当遇到设备终端发生硬件信息改变时,要尽可能找出硬件信息改变的原因,因为这些算法软件是通过Android标准api获取,所以,找到他们获取信息的接口,将接口的返回值修改成统一的返回值,即可解决硬件信息改变的问题。

问题描述

我们的设备终端在使用虹软的算法进行授权时,出现了硬件信息发生改变的情况,通过虹软的后台可以查到授权时是获取终端的IMEI,而授权失败时,获取到的是终端的MEID。

解决方法

虹软获取IMEI的方式,优先是使用getDeviceId,然后再使用getImei,最后使用getMeid;而当设备终端插入的卡是联通、移动或者电信4G卡时,获取的仍然是终端的IMEI;只有当设备插入空白电信卡或者电信2G卡时,才会获取终端的MEID。所以,解决方法就是将getDeviceId的返回值改成一直都返回IMEI,不再根据卡的类型返回IMEI或者MEID;修改文件路径是:

frameworks/opt/telephony/src/java/com/android/internal/telephony/GsmCdmaPhone.java

具体修改patch如下:

diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
old mode 100644
new mode 100755
index 4ab7240..56ac743
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -1456,21 +1456,22 @@ public class GsmCdmaPhone extends Phone {
     @Override
     public String getDeviceId() {
-        CarrierConfigManager configManager = (CarrierConfigManager)
-                mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
-        boolean force_imei = configManager.getConfigForSubId(getSubId())
-                .getBoolean(CarrierConfigManager.KEY_FORCE_IMEI_BOOL);
-
-        if (isPhoneTypeGsm() || force_imei) {
-            return getImei();
-        } else {
-            String id = getMeid();
-            if ((id == null) || id.matches("^0*$")) {
-                loge("getDeviceId(): MEID is not initialized use ESN");
-                id = getEsn();
-            }
-            return id;
-        }
+        // CarrierConfigManager configManager = (CarrierConfigManager)
+                // mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
+        // boolean force_imei = configManager.getConfigForSubId(getSubId())
+                // .getBoolean(CarrierConfigManager.KEY_FORCE_IMEI_BOOL);
+
+        // if (isPhoneTypeGsm() || force_imei) {
+            // return getImei();
+        // } else {
+            // String id = getMeid();
+            // if ((id == null) || id.matches("^0*$")) {
+                // loge("getDeviceId(): MEID is not initialized use ESN");
+                // id = getEsn();
+            // }
+            // return id;
+        // }
+		return mImei;
     }
 
     @Override

结尾

差不多有三年的时间没写博客了,自从上次换了工作,从Android应用开发转到Android系统开发之后,就把博客给搁置下了;现在想把这两年多学的东西全都写下来,记录下来;可能更多的会是一些系统层的知识。已经有很长一段时间没去研究过应用开发的一些新知识了,最近也是在恶补应用的知识,现在Android的市场的确不是那么好,但是,我也相信,只要学得精,还是会有出路的,毕竟三十六行,行行出状元。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值