# DKCloudID_NFC_Android
**Repository Path**: lochy/DKCloudID_NFC_Android
## Basic Information
- **Project Name**: DKCloudID_NFC_Android
- **Description**: 德科物联云解码源码。使用安卓手机NFC读取完整的身份证明文信息,包括身份证号、姓名、名族、性别、住址、头像、出生日期、有效期等信息。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://www.derkiot.com/
- **GVP Project**: No
## Statistics
- **Stars**: 16
- **Forks**: 4
- **Created**: 2020-07-21
- **Last Updated**: 2025-07-28
## Categories & Tags
**Categories**: android-modules
**Tags**: NFC, 身份证, Android, 云解码, 二代证云解码
## README
# DKCloudID_NFC_Android
#### 介绍
深圳市德科物联技术有限公司的手机NFC读取身份证明文信息Demo。更多信息请访问[德科官网](http://www.derkiot.com/)。
### 如何集成到项目中
**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' }
}
}
```
**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'
}
```
**Step 3. 在AndroidManifest.xml中添加网络权限、获取手机IMEI权限、访问网络权限**
```
```
**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);
```
**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);
}
};
```
**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();
}
```