这篇文章主要为大家详细介绍了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);
        }
    }
}

android中NFC读写功能的实现方法相关推荐

  1. Android中NFC读写

    参考网址:https://blog.csdn.net/sky2016_w/article/details/79026596 https://www.jianshu.com/p/61f90708bb02 ...

  2. Android中实现Launcher功能之四---滑屏初探 scrollTo 以及 scrollBy方法使用说明

     本文原创 ,转载必须注明出处 :http://blog.csdn.net/qinjuning 今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中 ...

  3. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  4. android datepicker使用方法,android中DatePicker和TimePicker的使用方法详解

    本文以实例讲述了android中DatePicker和TimePicker的使用方法,具体步骤如下: 下面是实现具体功能的代码,其中main.xml代码为: android:layout_width= ...

  5. android listview高级,Android中Listview点赞功能的实现

    最近这段时间一直在看Android,利用Listview去实现点赞功能,下面给大家介绍下基本思路. 基本思路: 进入界面–>获取数据–> 在Listview中显示–> 通过map集合 ...

  6. [转]5分钟实现Android中更换头像功能

    5分钟实现Android中更换头像功能 写在前面: 更换头像这个功能在用户界面几乎是100%出现的.通过拍摄照片或者调用图库中的图片,并且进行剪裁,来进行头像的设置. 功能相关截图如下: 下面我们直接 ...

  7. android文件读写操作布局文件代码,android实现文件读写功能

    本文实例为大家分享了android实现文件读写功能的具体代码,供大家参考,具体内容如下 读取: public static String _getJsonString(String fileName) ...

  8. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

  9. Android实现换发型功能,实现一个Android中更换头像功能

    实现一个Android中更换头像功能 本文原创,转载请经过本人准许 写在前面: 更换头像这个功能在用户界面几乎是100%出现的.通过拍摄照片或者调用图库中的图片,并且进行剪裁,来进行头像的设置. 功能 ...

最新文章

  1. 【MATLAB】变量 ( 变量引入 | 变量类型 )
  2. Winfrom实用代码项目
  3. 三维位姿:***图像特征-特征提取-姿态估计
  4. 限流中间件IpRateLimitMiddleware的使用
  5. 政策解读:《智能硬件产业创新发展专项行动(2016-2018年)》(上)
  6. python中字符串大小写转换常用操作
  7. 部署web应用程序到tomcat
  8. mysql单实例多数据库_Mysql单实例数据库的安装
  9. spring-kafka、kafka-client 和springboot的版本对应关系
  10. flashSlider——基于Jquery的图片展示插件
  11. 程序员必知的前端演进史
  12. 转【input type=file 标签禁止让用户手动输入】
  13. 解读ASP.NET 5 MVC6系列(11):Routing路由
  14. 餐饮后厨计算机应用,美萍餐饮管理系统,餐饮管理软件,餐饮软件,酒店收银系统,饭店点菜系统 --- 管理软件 美萍是专家!...
  15. 乐max2 android 7.0,辣评烩:​乐Max 2即将升级EUI 6.0 基于安卓7.0!
  16. 分享12个鲜为人知的的小众网站,每一个可以让你打开新世界的大门,让你震惊。...
  17. PHP 获取微视无水印源地址_如何提取获取下载美拍、微视、微拍等手机视频
  18. 微信公众号小程序怎么做?
  19. 理查德·克莱德曼钢琴曲全集(梦中的婚礼)
  20. androidstudio上传自己的lib到Jcenter

热门文章

  1. 康孚备份获取不了oracle状态,已解决: Re: 备份linux oracle 突然不能备份了 - Dell Community...
  2. 超爽动作类小游戏——4399DNF2.3
  3. 2021年3月青少年C/C++软件编程(四级)等级考试试卷及答案解析
  4. 带你深入理解期望、方差、协方差的含义
  5. 关键字替换的工具类实现
  6. IE8开发者模式 打开却看不见:
  7. Qt自定义控件--pagenavigation(页面导航)
  8. 服务器冲洗泵的作用是什么,高压清洗机的具体用途是什么?
  9. win10 uwp 使用油墨输入
  10. 细节是决定成败,看成功人生是怎么操作的