当前位置:   article > 正文

Android手机 通过NFC读取二代证信息_安卓 解析 nfc 身份证

安卓 解析 nfc 身份证

Android手机 通过NFC读取二代证信息


本文推荐一个安卓手机通过NFC读取二代证的SDK,目前市面上已经很多通过云解析来读取二代证的SDK,但是都有一个通病:对网络延时要求非常严格,稍有波动或者网速差一点就会失败重新读取,导致读取时间变长。
下面推荐的这款SDK,减少了与服务器交互的次数,实测其它SDK在读取身份证信息的时候都要与服务器交互40多少次,每次交互网络延时只要超过270ms就会失败。而本文介绍的SDK,只需要与服务器交互4次,并且最后一次交互没有网络延时要求。也就是只要前面3次交互网络延时不超过270ms就可以完成解析。大大的提高了读取成功率和速度。实测在3G网络下都能完成解析。
另外看了源码,发现这个SDK是做了服务器自动切换的,也就是说如果一个服务器出问题或者在升级维护的时候,会自动切换到另外一台服务器,大大提高了稳定性。

如何集成到项目中

Step 1. Add the JitPack repository to your build file

打开根build.gradle文件,将maven { url ‘https://jitpack.io’ }添加到repositories的末尾

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Step 2. 添加 implementation ‘com.gitee.lochy:dkcloudid-nfc-android-sdk:v2.0.1’ 到dependency


dependencies {
    implementation 'com.gitee.lochy:dkcloudid-nfc-android-sdk:v2.0.1'
        
    //注册设备POST请求要用到
    implementation "com.squareup.okhttp3:okhttp:4.9.0"
    implementation 'com.squareup.okio:okio:2.8.0'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Step 3. 在AndroidManifest.xml中添加网络权限、获取手机IMEI权限、访问网络权限


   <uses-permission android:name="android.permission.NFC" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.INTERNET" />
  • 1
  • 2
  • 3
  • 4

Step 4. NFC、云解码、IDCard初始化以及IMEI权限请求


    //NFC初始化
    mAdapter = NfcAdapter.getDefaultAdapter(this);
    pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
            getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    IntentFilter tech = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
    intentFiltersArray = new IntentFilter[]{tech,};
    techListsArray = new String[][]{new String[]{NfcB.class.getName()}};

    //获取IMEI权限
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            MainActivity.this.requestPermissions(new String[]{
                Manifest.permission.READ_PHONE_STATE,
            }, 1);
        }
    }

    //云解码初始化.注意:此账号为样机账号,随时可能会被关闭。请向供应商询问正式账号密码
    MsgCrypt msgCrypt = new MsgCrypt(this, "60273839", "VwQC9MzMY5hVx/Ky61IYRgP3q/ZRujTjvZfcJAnC+1w="); 

    //初始化设备
    dkNfcDevice = new DKNfcDevice(msgCrypt);
    dkNfcDevice.setCallBack(deviceManagerCallback);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

Step 5. 添加读卡回调


    @Override
    public void onNewIntent(Intent intent_nfc) {
        final Tag tag = intent_nfc.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        final NfcB nfcB = NfcB.get(tag);
        if (nfcB != null) {
            dkNfcDevice.onFinCard(nfcB);
        }
    }
    
    //设备操作类回调
    private DeviceManagerCallback deviceManagerCallback = new DeviceManagerCallback() {
        //身份证开始请求云解析回调
        @Override
        public void onReceiveSamVIdStart(byte[] initData) {
            super.onReceiveSamVIdStart(initData);

            Log.d(TAG, "开始解析");
        }

        //身份证云解析进度回调
        @Override
        public void onReceiveSamVIdSchedule(int rate) {
            super.onReceiveSamVIdSchedule(rate);
        }

        //身份证云解析异常回调
        @Override
        public void onReceiveSamVIdException(String msg) {
            super.onReceiveSamVIdException(msg);

            //显示错误信息
            //logViewln(msg);
        }

        //身份证云解析明文结果回调
        @Override
        public void onReceiveIDCardData(IDCardData idCardData) {
            super.onReceiveIDCardData(idCardData);

            //显示身份证数据
            showIDMsg(idCardData);
        }
    };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

Step 6. 在onResue和onPause中添加如下代码


    @Override
    protected void onResume() {
        mAdapter.enableForegroundDispatch(
                this, pendingIntent, intentFiltersArray, techListsArray);
        super.onResume();
    }

    @Override
    protected void onPause() {
        if (this.isFinishing()) {
            mAdapter.disableForegroundDispatch(this);
        }
        super.onPause();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

APK安装包和源码链接

链接: https://download.csdn.net/download/huangxinji33513/12833497

码云地址:
https://gitee.com/lochy/DKCloudID_NFC_Android
https://gitee.com/lochy/DKCloudID_NFC_Android/attach_files

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/303809
推荐阅读
相关标签
  

闽ICP备14008679号