第二代USB免驱动IC读写器IC-02支持Windows、安卓(Android)、Linux系统,为方便IC-02读写器能快速的接入安卓(Android)系统,我们提供了各种安卓版本的So库及示例源码,安卓工程师可直接拷贝以下代码使用到项目中。

按以下4部操作,可快速将So库加载到您的Android工程项目内:

1、将我们提供的开发包里的文件夹libs及OURMIFARE_V1.aar,一起复制你的项目APP-->libs目录下;
      2、修改APP-->src下的build.gradle文件,在buildTypes{}的后面,加入
           sourceSets {
                main {
                         jniLibs.srcDirs = ['libs']
                }
           }
           同时在dependencies {}中加入
           implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')
      3、加入NDK工具包。
      4、java的源文件中加入import com.reader.ourmifare;,就可以调用我们在AAR包里的函数了。

读写器介绍:RFID读写器NFC发卡器WEB可编程NDEF文本/网址/智能海报/电话/启动-淘宝网 (taobao.com)https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.11.d4b5789ej0RWYB&id=615391857885

Android Studio源码: 

package com.ic.usbic02ntag;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.reader.ourmifare;//引入我们的读卡器类

public class MainActivity extends AppCompatActivity {

private TextView tv;
    private static final byte NEEDSERIAL = 0x08;
    private static final byte NEEDKEY = 0x10;
    private static final byte NEEDHALT = 0x20;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.sample_text);
        tv.setText("操作结果");
    }

//NFC NTAG卡:寻卡-------------------------------------------------------------------------
    public void piccrequestul(View view)
    {
        byte status;//存放返回值
        byte[] mypiccserial = new byte[7];//卡序列号
        status = ourmifare.piccrequestul(this,mypiccserial);

String strls = "";
        if(status == 0)
        {
            strls = "寻卡成功!卡号为";
            String strls1;
            for(int i = 0;i < 6;i++)
            {
                strls1 = "0"+Integer.toHexString(mypiccserial[i] & 0xff);
                strls = strls + strls1.substring(strls1.length()-2) +"-";
            }
            strls1 = "0"+Integer.toHexString(mypiccserial[6] & 0xff);
            strls = strls + strls1.substring(strls1.length()-2);
        }
        else
        {
            if(status == 8)
            {
                strls = "请将卡放在IC卡读卡器感应区";
            }
            else if(status == 23)
            {
                strls = "错误提示:读卡器未插入";
            }
            else
            {
                strls = "错误代码:" + Integer.toString(status);
            }
        }
        tv.setText(strls);
    }

//NFC NTAG卡:轻松读卡--------------------------------------------------------------
    public void piccreadexntag(View view)
    {
        byte status;//存放返回值
        byte myctrlword;//控制字
        byte[] mypiccserial = new byte[7];//卡序列号
        byte[] mypicckey = new byte[4];//卡认证密码
        byte myblockaddr;//起始块地址
        byte myblocksize;//总块数
        byte[] mypiccdata = new byte[48];//读卡的数据缓冲,最大可以读出12个块共48个字节

myctrlword = 0;
        //myctrlword = myctrlword + NEEDKEY;//如果需要用到密码

myblockaddr = 4;
        myblocksize = 10;

status = ourmifare.piccreadexntag(this,myctrlword,mypiccserial,mypicckey,myblockaddr,myblocksize,mypiccdata);
        String strls = "";
        if(status == 0)
        {
            strls = "读取成功!卡号为";
            String strls1;
            for(int i = 0;i < 6;i++)
            {
                strls1 = "0"+Integer.toHexString(mypiccserial[i] & 0xff);
                strls = strls + strls1.substring(strls1.length()-2) +"-";
            }
            strls1 = "0"+Integer.toHexString(mypiccserial[6] & 0xff);
            strls = strls + strls1.substring(strls1.length()-2);
            strls += ",块数据为";
            for(int i = 0;i < (myblocksize*4-1);i++)
            {
                //从databuf[i+1]开始才是数据,databuf[0]为数据长度
                strls1 = "0"+Integer.toHexString(mypiccdata[i+1] & 0xff);
                strls = strls + strls1.substring(strls1.length()-2) +"-";
            }
            strls1 = "0"+Integer.toHexString(mypiccdata[myblocksize*4-1] & 0xff);
            strls = strls + strls1.substring(strls1.length()-2);
        }
        else
        {
            if(status == 8)
            {
                strls = "请将卡放在IC卡读卡器感应区";
            }
            else if(status == 23)
            {
                strls = "错误提示:读卡器未插入";
            }
            else
            {
                strls = "错误代码:" + Integer.toString(status);
            }
        }

tv.setText(strls);

}

//NFC NTAG卡:轻松写卡---------------------------------------------------
    public void piccwriteexntag(View view)
    {
        byte status;//存放返回值
        byte myctrlword;//控制字
        byte[] mypiccserial = new byte[7];//卡序列号
        byte[] mypicckey = new byte[4];//卡认证密码
        byte myblockaddr;//起始块地址
        byte myblocksize;//总块数
        byte[] mypiccdata = new byte[44];//写卡的数据缓冲,最大可以写入11个块共44个字节

//控制字指定,控制字的含义请查看本公司网站提供的动态库说明
        myctrlword = 0;
        //myctrlword = myctrlword + NEEDKEY;//如果需要用到密码
        myblockaddr = 4;
        myblocksize = 1;
        mypiccdata[0] = 0x11;
        mypiccdata[1] = 0x22;
        mypiccdata[2] = 0x33;
        mypiccdata[3] = 0x44;

status = ourmifare.piccwriteexntag(this,myctrlword,mypiccserial,mypicckey,myblockaddr,myblocksize,mypiccdata);
        String strls = "";
        if(status == 0)
        {
            strls = "写卡成功!卡号为";
            String strls1;
            for(int i = 0;i < 6;i++)
            {
                strls1 = "0"+Integer.toHexString(mypiccserial[i] & 0xff);
                strls = strls + strls1.substring(strls1.length()-2) +"-";
            }
            strls1 = "0"+Integer.toHexString(mypiccserial[6] & 0xff);
            strls = strls + strls1.substring(strls1.length()-2);
            strls += ",写入块中的数据为";
            for(int i = 0;i < (myblocksize * 4-1);i++)
            {
                //从databuf[i+1]开始才是数据,databuf[0]为数据长度
                strls1 = "0"+Integer.toHexString(mypiccdata[i+1] & 0xff);
                strls = strls + strls1.substring(strls1.length()-2) +"-";
            }
            strls1 = "0"+Integer.toHexString(mypiccdata[myblocksize * 4-1] & 0xff);
            strls = strls + strls1.substring(strls1.length()-2);
        }
        else
        {
            if(status == 8)
            {
                strls = "请将卡放在IC卡读卡器感应区";
            }
            else if(status == 23)
            {
                strls = "错误提示:读卡器未插入";
            }
            else
            {
                strls = "错误代码:" + Integer.toString(status);
            }
        }
        tv.setText(strls);
    }

//NFC NTAG卡:更改卡密码---------------------------------------------------------
    public void piccinitntag(View view)
    {
        String strls = "NFC NTAG卡:更改卡密码 功能用到piccinitntag函数,已在动态库文件中,请参考VB例子代码";
        tv.setText(strls);
    }

//读出设备全球唯一的设备编号,作为加密狗用----------------------------------------
    public void pcdgetdevicenumber(View view)
    {
        byte status;//存放返回值
        byte[] devicenumber = new byte[4];
        String strls = "";
        status = ourmifare.pcdgetdevicenumber(this,devicenumber);
        if(status == 0)
        {
            strls = "读取成功!设备编号为";
            String strls1 = "0"+Integer.toHexString(devicenumber[0]);
            strls = strls + strls1.substring(strls1.length()-2) +"-";
            strls1 = "0"+Integer.toHexString(devicenumber[1]);
            strls = strls + strls1.substring(strls1.length()-2) +"-";
            strls1 = "0"+Integer.toHexString(devicenumber[2]);
            strls = strls + strls1.substring(strls1.length()-2) +"-";
            strls1 = "0"+Integer.toHexString(devicenumber[3]);
            strls = strls + strls1.substring(strls1.length()-2);
        }
        else
        {
            if(status == 23)
            {
                strls = "错误提示:读卡器未插入";
            }
            else
            {
                strls = "错误代码:" + Integer.toString(status);
            }
        }
        tv.setText(strls);
    }

//让设备发出声响-----------------------------------------------------
    public void beep(View view)
    {
        byte status;//存放返回值
        String strls = "";
        status = ourmifare.pcdbeep(this,50);

if(status == 0)
        {
            strls = "读卡器嘀一声成功!!!";
        }
        else
        {
            if(status == 23)
            {
                strls = "错误提示:读卡器未插入";
            }
            else
            {
                strls = "错误代码:" + Integer.toString(status);
            }
        }
        tv.setText(strls);
    }
}

Android APP源码下载:Ntag21x芯片读写Android示例源码.rar-其它文档类资源-CSDN文库https://download.csdn.net/download/zhangjin7422/21411605

如何开发Android安卓APP读写NFC Ntag相关推荐

  1. 从零开始开发Android相机app(三)简单介绍图像滤镜功能

    目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...

  2. react native开发Android 篇——APP名称、图标、启动页

    react native开发Android 篇--APP名称.图标.启动页 设置APP名称 设置APP图标 设置启动页 隐藏启动页 设置APP名称 编辑 android/app/src/main/re ...

  3. 30款APP源码打包 Java Android安卓App源码 30款打包下载

    [30款APP源码打包 Java Android安卓App源码 30款打包下载](访问密码: 168168)(https://474b.com/file/29013429-461457489)

  4. 如何开发Android安卓RFID读卡APP

    读卡器介绍:免驱RFID读卡器 Web读卡器 可二次开发 Android.Linux 乐乐课堂-淘宝网 (taobao.com)https://item.taobao.com/item.htm?spm ...

  5. Android:安卓APP启动过程简介

    你打开一个安卓系统 它的界面是Launcher 进程,它不断的检测用户的触摸落在哪个APP上面,如果你的触摸落在空白它不做处理,你要滑动他就给你滑动 当用户触摸这个app的时候, 他会进行下面的流程 ...

  6. android快速开发一个app,如何高效率开发Android一个APP?

    我猜想题主是想开发一款APP来练练手,但有些开源库,框架之类不是很熟悉.刚好前几天在知乎回答过类似的问题,这里再补充下 网络模块 事件总线 依赖注入 图片模块 数据库模块 响应式编程 日志输出 测试相 ...

  7. 开发Android电子书App的平台

    应用之星是一个移动应用开发平台,我在他们网站开发的电子书App很不错.感慨的是现在App这么多,移动应用开发平台也许要火.

  8. android开发分辨率,安卓APP设计规范之1080*1920设计稿对应开发尺寸

    目前市场上,只有Android系统的手机才有1080P全高清的产品.1080P是说手机屏幕的分辨率达到1920*1080像素.1080P的屏幕最直观的改变当然是屏幕精细度的巨大提升,就算是5寸的屏幕, ...

  9. uniapp开发安卓app 实现nfc读卡功能

    <template><view class="content"><view class="box"><view cla ...

  10. android智能家居开发视频教程,安卓app控制嵌入式软硬件开发智能家居视频教程...

    基础篇 01-课程简介&初识Android系统.avi 02-Android系统架构.avi 03-JDK安装.avi 04-Android开发环境搭建.avi 05-创建第一个Android ...

最新文章

  1. 一个装作异步的代码段
  2. VS2010版快捷键
  3. 改造一下jeecg中的部门树
  4. python 且_Pyface库:一个基于pyqt、pyside、wx且简化的python的GUI
  5. oracle 提示存在lob,Oracle数据库出现ORA-19566 LOB坏块的处理记录
  6. iOS开发工程师笔试题
  7. Maven核心概念(转)
  8. 概要设计说明书任务分配
  9. c#电子教鞭(屏幕画笔)快捷键ctrl+q
  10. linux 平铺式桌面,Linux 桌面平铺管理器 - i3wm
  11. onnx-modifier:ONNX可视化编辑
  12. ResNet残差网络——Deep Residual Learning for image recongnition
  13. PHP学习-数据类型
  14. 《计算机网络:自顶向下方法(原书第七版)》 参考答案(英文版+中文版)
  15. python语音识别分析_python数据建模分析 - 语音识别
  16. Prometheus入门使用(三)
  17. 长沙 22 岁女子长期过量喝奶茶进ICU,血糖值过高,血液呈乳白色几乎变「甜饮」,奶茶喝多少会有危险?
  18. TikTok不可思议的崛起
  19. 传统企业IT如何上云
  20. 软科计算机科学与工程专业,2019上海软科世界一流学科排名计算机科学与工程专业排名利物浦大学排名第301-400...

热门文章

  1. 区分clientHeight、scrollHeight、offsetHeight
  2. 7月30日PMP考试注意事项
  3. stm32毕业设计 超声波雷达可视化系统
  4. 毕设 学生信息管理系统论文
  5. 金蝶K3系统BOM批量导入操作指南
  6. MTK wifi驱动源码分析
  7. python做积分计算器_PyQt5练习:积分计算器
  8. 2022创业基础——李家华等章节测试答案以及期末考试答案
  9. G.8032 ERPS 轻松强固网络安全!
  10. Linux x86-64 IOMMU详解(一)——IOMMU简介