IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android中NFC读写功能的实现方法 -> 正文阅读

[移动开发]android中NFC读写功能的实现方法

这篇文章主要为大家详细介绍了android中NFC读写功能的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了android中NFC读写功能的具体代码,供大家参考,具体内容如下

首先检查一下设备是否支持NFC功能

private?void?checkNFCFunction()?{
????????//?TODO?Auto-generated?method?stub
????????mNfcAdapter?=?NfcAdapter.getDefaultAdapter(this);
????????//?check?the?NFC?adapter?first
????????if?(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);//?back
????????????dialog.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);//?back
????????????????dialog.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;
????@Override
????protected?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_fengxiang_three);
????????ButterKnife.bind(this);
????????writeBtn.setOnClickListener(new?View.OnClickListener()?{
????????????@Override
????????????public?void?onClick(View?view)?{
????????????????ifWrite?=?true;
????????????}
????????});
????????samCode?=?getIntent().getStringExtra("samCode");
????????tvBianma.setText(samCode);
????????checkNFCFunction();?//?NFC?Check
????????mPendingIntent?=?PendingIntent.getActivity(this,?0,?new?Intent(this,
????????????????getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),?0);
????????//?Setup?an?intent?filter?for?all?MIME?based?dispatches
????????IntentFilter?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?stub
????????mNfcAdapter?=?NfcAdapter.getDefaultAdapter(this);
????????//?check?the?NFC?adapter?first
????????if?(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);//?back
????????????dialog.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);//?back
????????????????dialog.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;
????}
????@Override
????protected?void?onNewIntent(Intent?intent)?{
????????//?TODO?自动生成的方法存根
????????super.onNewIntent(intent);
//????????tv1.setText("发现新的?Tag:??"?+?++mCount?+?"\n");//?mCount?计数
????????String?intentActionStr?=?intent.getAction();//?获取到本次启动的action
????????if?(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intentActionStr)//?NDEF类型
????????????????||?NfcAdapter.ACTION_TECH_DISCOVERED.equals(intentActionStr)//?其他类型
????????????????||?NfcAdapter.ACTION_TAG_DISCOVERED.equals(intentActionStr))?{//?未知类型
????????????//?在intent中读取Tag?id
????????????Tag?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("写入失败");
????????}
????}
????@Override
????protected?void?onResume()?{
????????super.onResume();
????????enableForegroundDispatch();
????}
????private?void?enableForegroundDispatch()?{
????????if?(mNfcAdapter?!=?null)?{
????????????mNfcAdapter.enableForegroundDispatch(this,?mPendingIntent,
????????????????????mFilters,?mTechLists);
????????}
????}
????@Override
????public?void?onPause()?{
????????super.onPause();
????????disableForegroundDispatch();
????}
????private?void?disableForegroundDispatch()?{
????????//?TODO?自动生成的方法存根
????????if?(mNfcAdapter?!=?null)?{
????????????mNfcAdapter.disableForegroundDispatch(this);
????????}
????}
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 08:05:55  更:2021-09-19 08:06:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:24:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码