Android实现读取NFC卡的编号

本文实例为大家分享了Android读取NFC卡的编号具体代码,供大家参考,具体内容如下

NFC相关androidManifest文件设置:

一、权限:<uses-permission android:name="android.permission.NFC"/>
二、sdk级别限制:<uses-sdk android:minSdkVersion="10"/>
三、特殊功能限制<uses-feature android:name="android.hardware.nfc" android:required="true" />这个生命可以让你的应用在google play上被声明使用者必须拥有nfc功能。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nfc"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.NFC" />

    <uses-feature
        android:name="android.hardware.nfc"
        android:required="true" />

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.nfc.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
            </intent-filter>

            <meta-data
                android:name="android.nfc.action.TECH_DISCOVERED"
                android:resource="@xml/nfc_tech_filter" />

        </activity>
    </application>

</manifest>

上面的android:resource="@xml/nfc_tech_filter"是对tech类型的过滤条件,在res文件夹新建一个xml文件夹,新建nfc_tech_filter.xml文件。

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.NfcV</tech>
        <tech>android.nfc.tech.Ndef</tech>
        <tech>android.nfc.tech.NdefFormatable</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.MifareUltralight</tech>
    </tech-list>
</resources>

下面是封装了读取NFC卡号的一个类:

class NFCCard {

 private Activity context;
 private PendingIntent pendingIntent;
 private NfcAdapter adapter;
 private IntentFilter[] intentFilters;
 private String[][] techLists;
 private final char[] HEX_EXCHANGE = { '0', '1', '2', '3', '4', '5', '6',
   '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

 public NFCCard(Context context) {
  this.context = (Activity) context;
 }

 void init() {

  adapter = NfcAdapter.getDefaultAdapter(context);
  // 创建一个PendingIntent对象,当Android系统扫描到标签时,则会填充到这个对象。
  pendingIntent = PendingIntent.getActivity(context, 0, new Intent(
    context, context.getClass())
    .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
  IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
  try {
   ndef.addDataType("*/*");
  } catch (MalformedMimeTypeException e) {
   throw new RuntimeException("fail", e);
  }
  intentFilters = new IntentFilter[] { ndef, };
  techLists = new String[][] { new String[] { MifareClassic.class
    .getName() } };
 }

 public boolean open() {
  // TODO 打开NfcAdapter,已打开则返回true。应在onResume()中调用
  if (adapter != null)
   adapter.enableForegroundDispatch(context, pendingIntent,
     intentFilters, techLists);
  return adapter.isEnabled();
 }

 public boolean close() {
  // TODO 关闭NfcAdapter,已关闭则返回true
  if (adapter != null)
   adapter.disableForegroundDispatch(context);
  return !adapter.isEnabled();
 }

 public String getId(Intent intent) {
  // TODO 获取NFC卡的编号。应在onNewIntent()中调用
  Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
  return toHexString(tagFromIntent.getId(), 0,
    tagFromIntent.getId().length);
 }

 private String toHexString(byte[] d, int s, int n) {
  // TODO 转换为十六进制形式的字符串
  final char[] ret = new char[n * 2];
  final int e = s + n;
  int x = 0;
  for (int i = s; i < e; ++i) {
   final byte v = d[i];
   ret[x++] = HEX_EXCHANGE[0x0F & (v >> 4)];
   ret[x++] = HEX_EXCHANGE[0x0F & v];
  }
  return new String(ret);
 }

需要注意的是,上面配置文件中有一个“ android:launchMode="singleTask"”,这是设置应用为单任务。代码中的getId(Intent intent)必须要在Activity的onNewIntent(Intent intent)中执行。因为系统检测到NFC卡的时候,会自动生成封装了相应Tag的Intent,当应用在接收到Intent的时候,默认情况下是启动自己的Activity,这样就会致使每次接收到Intent都会启动新的Activity。把应用设置为单任务后,就可以避免这种情况的发生。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android模拟器开发和测试nfc应用实例详解

    从Android2.3开始支持NFC.不过NFC应用只能在Android手机(或平板电脑)上测试和开发,而且Android手机还必须有NFC芯 片.而且如果测试NFC传输文件时至少需要两部支持NFC的手机.当然,如果测试读写NFC标签,还需要一些NFC标签或帖子.而且NFC在模拟器上时不能运行的.所以从这一点来说,NFC开发需要更多的设备,比较麻烦.这也蓝牙.传感器是一样的.都不能在Android模拟器上开发和测试.真不知道Google为什么不解决这一问题. 不过这种问题也不是不能解决,而且并不

  • 详解Android平台上读写NFC标签

    本文主要谈一谈Android上有关NFC标签的读写问题(NDEF格式). 硬件环境:android4.0(Sony M35h)+可读可写的NFC标签若干 一.NFC基础知识 1.NFC是什么? NFC,即Near Field Communication,近距离无线通讯技术,是一种短距离的(通常<=4cm或更短)高频(13.56M Hz)无线通信技术,它提供了一种简单.触控式的解决方案,可以让消费者简单直观地交换信息.访问内容与服务. 2.NFC的技术优势? 与蓝牙相比:NFC操作简单,配对迅速

  • Android 使用手机NFC的读取NFC标签数据的方法

    一 你需要准备的: 一部有nfc的手机,一张有nfc标签的卡 二 nfc简介 nfc(近距离无线通讯技术),是由非接触式射频识别(RFID)及互连互通技术整合演变而来,通过在单一芯片上集成感应式读卡器.感应式卡片和点对点通信的功能,利用移动终端实现移动支付.电子票务.门禁.移动身份识别.防伪等应用. 三 nfc过滤标签的设置 3-1 在Manifest添加权限: 在xml里添加nfc的使用权限 <uses-permission android:name="android.permissio

  • Android实现NFC读取校园卡

    本文实例为大家分享了Android实现NFC读取校园卡的具体代码,供大家参考,具体内容如下 主程序: package com.nfclab.stuCard; import java.io.IOException; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.content.IntentFilter; import andro

  • 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) { // mTextVie

  • 深入分析Android NFC技术 android nfc开发

    从概念,实现原理以及最红实现的源码等有助于大家对NFC技术有更深入的理解. NFC 是 Near Field Communication 缩写,即近距离无线通讯技术.可以在移动设备.消费类电子产品.PC 和智能控件工具间进行近距离无线通信.简单一点说,nfc 功能是什么?nfc功能有什么用?其实NFC提供了一种简单.触控式的解决方案,可以让消费者简单直观地交换信息.访问内容与服务.NFC 技术允许电子设备之间进行非接触式点对点数据传输,在十厘米(3.9英吋)内,交换数据,其传输速度有106Kbi

  • android nfc常用标签读取总结

    有几天没有更新博客了,不过本篇却准备了许久,希望能带给每一位开发者最简单高效的学习方式.废话到此为止,下面开始正文. NFC(Near Field Communication,近场通信)是一种数据传输技术.与Wi-Fi.蓝牙.红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4厘米.但是NFC传输速度要比红外快.目前NFC已经出现了一些应用,例如电子标签识别.刷手机.点对点付款.身份识别.信息记录等,本篇文章的目的是为大家揭开NFC标签的面纱. 下面我们先从NFC的工作模式开始阐述NFC

  • android实现NFC读写功能

    一.NFC是什么? 近距离无线通讯技术,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司).诺基亚和索尼共同研制开发,其基础是RFID及互连技术.近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内.其传输速度有106 Kbit/秒.212 Kbit/秒或者424 Kbit/秒三种.目前近场通信已通过成为ISO/IEC IS 18092国际标准.ECMA-340标准与ETSI

  • Android实现读取NFC卡卡号示例

    Android实现读取NFC卡卡号示例,具体如下: 1.权限 <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> 2.注册(静态) <intent-filter> <action andro

  • Android实现读取NFC卡的编号

    本文实例为大家分享了Android读取NFC卡的编号具体代码,供大家参考,具体内容如下 NFC相关androidManifest文件设置: 一.权限:<uses-permission android:name="android.permission.NFC"/> 二.sdk级别限制:<uses-sdk android:minSdkVersion="10"/> 三.特殊功能限制<uses-feature android:name=&quo

  • Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法

    本文实例讲述了Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法.分享给大家供大家参考,具体如下: MainActivity.Java package com.zxl; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.os.En

  • Android编程读取sd卡中图片的方法

    本文实例讲述了Android读取sd卡中图片的方法.分享给大家供大家参考,具体如下: 一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="andr

  • Android开发实现NFC刷卡读取的两种方式

    场景:NFC是目前Android手机一个主流的配置硬件项,本文主要讲解一下Android开发中,NFC刷卡的两种实现方式以及相关方法源码解析. ①:Manifest注册方式:这种方式主要是在Manifest文件对应的activity下,配置过滤器,以响应不同类型NFC  Action.使用这种方式,在刷卡时,如果手机中有多个应用都存在该NFC实现方案,系统会弹出能响应NFC事件的应用列表供用户选择,用户需要点击目标应用来响应本次NFC刷卡事件.目前我公司这边项目中使用了该逻辑,比较简便,这里先贴

  • android编程实现sd卡读取数据库的方法

    本文实例讲述了android编程实现sd卡读取数据库的方法.分享给大家供大家参考,具体如下: 先在 Manifest 里添加权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

  • Android 中读取Excel文件实例详解

    Android 中读取Excel文件实例详解 最近有个需求需要在app内置数据,新来的产品扔给了我两个Excel表格就不管了(两个表格格式还不统一...),于是通过度娘等方法找到了Android中读取Excel表格文件的一种方法,记录一下. 闲话一下Excel中工作簿和工作表的区别: 工作簿中包含有工作表.工作簿可以由一张或多张工作表组成,一个工作簿就是一个EXCEL表格文件. 好了,开始读取表格文件吧. 前提 首先,我们假设需要读取的表格文件名字为test.xls, 位于assets根目录下.

  • Android4.X读取SIM卡短信和联系人相关类实例分析

    本文实例讲述了Android4.X读取SIM卡短信和联系人相关类.分享给大家供大家参考,具体如下: 1. IccSmsInterfaceManager 这个类的主要作用有两个 <1>通过 SMSDispatcher,发送短信数据 <2>更新和查询SIM卡的短信数据 IccSmsInterfaceManager 是一个Binder 服务类,Binder接口是 ISms. IccSmsInterfaceManager 被创造时 Binder服务会被注册. IccSmsInterface

随机推荐