146 lines
4.4 KiB
Java
146 lines
4.4 KiB
Java
package com.arpa.hndahesudintocctmsdriver.util;
|
|
|
|
import android.app.Activity;
|
|
import android.app.PendingIntent;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.IntentFilter;
|
|
import android.nfc.FormatException;
|
|
import android.nfc.NdefMessage;
|
|
import android.nfc.NdefRecord;
|
|
import android.nfc.NfcAdapter;
|
|
import android.nfc.NfcManager;
|
|
import android.nfc.Tag;
|
|
import android.nfc.tech.Ndef;
|
|
import android.os.Parcelable;
|
|
import android.provider.Settings;
|
|
|
|
import java.io.IOException;
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
/**
|
|
* @author hlh
|
|
* @version 1.0.0
|
|
* @date 2022/2/15 17:04
|
|
* @description:
|
|
*/
|
|
public class NfcUtils {
|
|
|
|
//nfc
|
|
public static NfcAdapter mNfcAdapter;
|
|
public static IntentFilter[] mIntentFilter = null;
|
|
public static PendingIntent mPendingIntent = null;
|
|
public static String[][] mTechList = null;
|
|
|
|
/**
|
|
* 构造函数,用于初始化nfc
|
|
*/
|
|
public NfcUtils(Activity activity) {
|
|
mNfcAdapter = NfcCheck(activity);
|
|
NfcInit(activity);
|
|
}
|
|
|
|
/**
|
|
* 检查NFC是否打开
|
|
*/
|
|
public static NfcAdapter NfcCheck(Activity activity) {
|
|
NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
|
|
if (mNfcAdapter == null) {
|
|
return null;
|
|
} else {
|
|
if (!mNfcAdapter.isEnabled()) {
|
|
Intent setNfc = new Intent(Settings.ACTION_NFC_SETTINGS);
|
|
activity.startActivity(setNfc);
|
|
}
|
|
}
|
|
return mNfcAdapter;
|
|
}
|
|
|
|
/**
|
|
* 初始化nfc设置
|
|
*/
|
|
public static void NfcInit(Activity activity) {
|
|
mPendingIntent = PendingIntent.getActivity(activity, 0, new Intent(activity, activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
|
|
IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
|
|
IntentFilter filter2 = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
|
|
try {
|
|
filter.addDataType("*/*");
|
|
} catch (IntentFilter.MalformedMimeTypeException e) {
|
|
e.printStackTrace();
|
|
}
|
|
mIntentFilter = new IntentFilter[]{filter, filter2};
|
|
mTechList = null;
|
|
}
|
|
|
|
/**
|
|
* 读取NFC的数据
|
|
*/
|
|
public static String readNFCFromTag(Intent intent) throws UnsupportedEncodingException {
|
|
Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
|
|
if (rawArray != null) {
|
|
NdefMessage mNdefMsg = (NdefMessage) rawArray[0];
|
|
NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];
|
|
if (mNdefRecord != null) {
|
|
String readResult = new String(mNdefRecord.getPayload(), "UTF-8");
|
|
return readResult;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
/**
|
|
* 往nfc写入数据
|
|
*/
|
|
public static void writeNFCToTag(String data, Intent intent) throws IOException, FormatException {
|
|
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
|
|
Ndef ndef = Ndef.get(tag);
|
|
ndef.connect();
|
|
NdefRecord ndefRecord = NdefRecord.createTextRecord(null, data);
|
|
NdefRecord[] records = {ndefRecord};
|
|
NdefMessage ndefMessage = new NdefMessage(records);
|
|
ndef.writeNdefMessage(ndefMessage);
|
|
}
|
|
|
|
/**
|
|
* 读取nfcID
|
|
*/
|
|
public static String readNFCId(Intent intent) throws UnsupportedEncodingException {
|
|
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
|
|
String id = ByteArrayToHexString(tag.getId());
|
|
return id;
|
|
}
|
|
|
|
/**
|
|
* 将字节数组转换为字符串
|
|
*/
|
|
private static String ByteArrayToHexString(byte[] inarray) {
|
|
int i, j, in;
|
|
String[] hex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
|
|
String out = "";
|
|
|
|
for (j = 0; j < inarray.length; ++j) {
|
|
in = (int) inarray[j] & 0xff;
|
|
i = (in >> 4) & 0x0f;
|
|
out += hex[i];
|
|
i = in & 0x0f;
|
|
out += hex[i];
|
|
}
|
|
return out;
|
|
}
|
|
|
|
public static boolean hasNfc(Context context){
|
|
boolean bRet=false;
|
|
if(context==null)
|
|
return bRet;
|
|
NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE);
|
|
NfcAdapter adapter = manager.getDefaultAdapter();
|
|
if (adapter != null && adapter.isEnabled()) {
|
|
// adapter存在,能启用
|
|
bRet=true;
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
}
|