android中NFC读写功能的实现方法

本文实例为大家分享了android中NFC读写功能的具体代码,供大家参考,具体内容如下
首先检查一下设备是否支持NFC功能

private void checkNFCFunction() {// TODO Auto-generated method stubmNfcAdapter = NfcAdapter.getDefaultAdapter(this); // check the NFC adapter firstif (mNfcAdapter == null) {// mTextView.setText("NFC apdater is not available"); Dialog dialog = null; AlertDialog.Builder customBuilder = new AlertDialog.Builder(this); customBuilder.setTitle("很遗憾").setMessage("没发现NFC设备,请确认您的设备支持NFC功能!").setIcon(R.drawable.ic_banner).setPositiveButton("是",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss(); finish(); }}); dialog = customBuilder.create(); dialog.setCancelable(false); // backdialog.setCanceledOnTouchOutside(false); SetDialogWidth(dialog).show(); return; } else {if (!mNfcAdapter.isEnabled()) {Dialog dialog = null; AlertDialog.Builder customBuilder = new AlertDialog.Builder(this); customBuilder.setTitle("提示").setMessage("请确认NFC功能是否开启!").setIcon(R.drawable.ic_banner).setPositiveButton("现在去开启......",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss(); Intent setnfc = new Intent(Settings.ACTION_NFC_SETTINGS); startActivity(setnfc); }}); dialog = customBuilder.create(); dialog.setCancelable(false); // backdialog.setCanceledOnTouchOutside(false); SetDialogWidth(dialog).show(); return; }}}

读取NFC信息
package com.xxzhy.shujucaiji.fengxiang; import android.app.Dialog; import android.app.PendingIntent; import android.content.DialogInterface; 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.Tag; import android.nfc.tech.MifareClassic; import android.nfc.tech.Ndef; import android.nfc.tech.NfcA; import android.nfc.tech.NfcB; import android.nfc.tech.NfcF; import android.nfc.tech.NfcV; import android.os.Bundle; import android.provider.Settings; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.xxzhy.shujucaiji.R; import com.xxzhy.shujucaiji.utils.ByteArrayChange; import com.xxzhy.shujucaiji.utils.ToStringHex; import com.xxzhy.shujucaiji.utils.ToastUtil; import com.xxzhy.shujucaiji.utils.WebServiceClient; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by apple on 2017/10/30. */public class FengxiangThreeActivity extends AppCompatActivity {@BindView(R.id.tv_bianma)TextView tvBianma; @BindView(R.id.ll_input)LinearLayout llInput; @BindView(R.id.noteText)TextView noteText; @BindView(R.id.writeBtn)Button writeBtn; String[][] mTechLists; private Boolean ifWrite; private NfcAdapter mNfcAdapter; private PendingIntent mPendingIntent; private IntentFilter[] mFilters; byte[] code = MifareClassic.KEY_DEFAULT; //读写标签中每个块的密码private byte[] b0; int block[] = {4, 5, 6, 8, 9, 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24,25, 26, 28, 29, 30, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 45, 46,48, 49, 50, 52, 53, 54, 56, 57, 58, 60, 61, 62}; private String samCode; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_fengxiang_three); ButterKnife.bind(this); writeBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {ifWrite = true; }}); samCode = getIntent().getStringExtra("samCode"); tvBianma.setText(samCode); checkNFCFunction(); // NFC CheckmPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); // Setup an intent filter for all MIME based dispatchesIntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED); try {ndef.addDataType("*/*"); } catch (IntentFilter.MalformedMimeTypeException e) {throw new RuntimeException("fail", e); }mFilters = new IntentFilter[]{ndef,}; // 根据标签类型设置mTechLists = new String[][]{new String[]{NfcA.class.getName()}}; }private void checkNFCFunction() {// TODO Auto-generated method stubmNfcAdapter = NfcAdapter.getDefaultAdapter(this); // check the NFC adapter firstif (mNfcAdapter == null) {// mTextView.setText("NFC apdater is not available"); Dialog dialog = null; AlertDialog.Builder customBuilder = new AlertDialog.Builder(this); customBuilder.setTitle("很遗憾").setMessage("没发现NFC设备,请确认您的设备支持NFC功能!").setIcon(R.drawable.ic_banner).setPositiveButton("是",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss(); finish(); }}); dialog = customBuilder.create(); dialog.setCancelable(false); // backdialog.setCanceledOnTouchOutside(false); SetDialogWidth(dialog).show(); return; } else {if (!mNfcAdapter.isEnabled()) {Dialog dialog = null; AlertDialog.Builder customBuilder = new AlertDialog.Builder(this); customBuilder.setTitle("提示").setMessage("请确认NFC功能是否开启!").setIcon(R.drawable.ic_banner).setPositiveButton("现在去开启......",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss(); Intent setnfc = new Intent(Settings.ACTION_NFC_SETTINGS); startActivity(setnfc); }}); dialog = customBuilder.create(); dialog.setCancelable(false); // backdialog.setCanceledOnTouchOutside(false); SetDialogWidth(dialog).show(); return; }}}private Dialog SetDialogWidth(Dialog dialog) {// TODO 自动生成的方法存根DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); if (screenWidth > screenHeight) {params.width = (int) (((float) screenHeight) * 0.875); } else {params.width = (int) (((float) screenWidth) * 0.875); }dialog.getWindow().setAttributes(params); return dialog; }@Overrideprotected void onNewIntent(Intent intent) {// TODO 自动生成的方法存根super.onNewIntent(intent); //tv1.setText("发现新的 Tag:" + ++mCount + "\n"); // mCount 计数String intentActionStr = intent.getAction(); // 获取到本次启动的actionif (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intentActionStr)// NDEF类型|| NfcAdapter.ACTION_TECH_DISCOVERED.equals(intentActionStr)// 其他类型|| NfcAdapter.ACTION_TAG_DISCOVERED.equals(intentActionStr)) {// 未知类型// 在intent中读取Tag idTag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] bytesId = tag.getId(); // 获取id数组//info += ByteArrayChange.ByteArrayToHexString(bytesId) + "\n"; //tv2.setText("标签UID:" + "\n" + info); // 读取存储信息//if (mRead.isChecked()) {//// mChange=false; //tv3.setText("读取成功! " + readTag(tag)); //// readNfcVTag(tag); //etSector.setText(""); //etBlock.setText(""); //etData.setText(""); //}// 写数据if (ifWrite) {if (samCode.length() < 16){for (int i = samCode.length(); i < 16; i++) {samCode+=" "; }}writeTag(tag, samCode); }// 转换为ASCll//if (mChange.isChecked()) {//tv3.setText(change(tag)); //Toast.makeText(getBaseContext(), "转换成功", Toast.LENGTH_SHORT).show(); //etSector.setText(""); //etBlock.setText(""); //etData.setText(""); //}}}// 写数据public void writeTag(Tag tag, String str) {MifareClassic mfc = MifareClassic.get(tag); try {if (mfc != null) {mfc.connect(); } else {Toast.makeText(this, "写入失败", Toast.LENGTH_SHORT).show(); return; }boolean b = mfc.authenticateSectorWithKeyA(5, code); if (b) {mfc.writeBlock(4 * 5, str.getBytes()); mfc.close(); ToastUtil.showToast("写入成功"); finish(); }} catch (IOException e) {e.printStackTrace(); ToastUtil.showToast("写入失败"); }}@Overrideprotected void onResume() {super.onResume(); enableForegroundDispatch(); }private void enableForegroundDispatch() {if (mNfcAdapter != null) {mNfcAdapter.enableForegroundDispatch(this, mPendingIntent,mFilters, mTechLists); }}@Overridepublic void onPause() {super.onPause(); disableForegroundDispatch(); }private void disableForegroundDispatch() {// TODO 自动生成的方法存根if (mNfcAdapter != null) {mNfcAdapter.disableForegroundDispatch(this); }}}

【android中NFC读写功能的实现方法】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读