初始化
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user