Android实现读取NFC卡卡号示例

作者:I_Gisvity 时间:2021-08-06 21:08:39 

Android实现读取NFC卡卡号示例,具体如下:

1.权限


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

2.注册(静态)


     <intent-filter>
       <action android:name="android.nfc.action.TAG_DISCOVERED" />
       <data android:mimeType="text/plain" />
     </intent-filter>

3.Activity

初始化


   //初始化NfcAdapter
   mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
       // 初始化PendingIntent,当有NFC设备连接上的时候,就交给当前Activity处理
   pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass())
       .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

启动


 @Override
 protected void onResume() {
   super.onResume();
   mNfcAdapter.enableForegroundDispatch(this, pi, null, null); //启动
 }

获取数据


 @Override
 protected void onNewIntent(Intent intent) {
   super.onNewIntent(intent);
   // 当前app正在前端界面运行,这个时候有intent发送过来,那么系统就会调用onNewIntent回调方法,将intent传送过来
   // 我们只需要在这里检验这个intent是否是NFC相关的intent,如果是,就调用处理方法
   if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
     processIntent(intent);
   }
 }

解析


 /**
  * Parses the NDEF Message from the intent and prints to the TextView
  */
 private void processIntent(Intent intent) {
   //取出封装在intent中的TAG
   Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
   String CardId =ByteArrayToHexString(tagFromIntent.getId());
 }
private String ByteArrayToHexString(byte[] inarray) {
   int i, j, in;
   String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
       "B", "C", "D", "E", "F" };
   String out = "";

for (j = 0; j < inarray.length; ++j) {
     in = (int) inarray[j] & 0xff;
     i = (in >> 4) & 0x0f;
     out += hex[i];
     i = in & 0x0f;
     out += hex[i];
   }
   return out;
 }

4.完整参考


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="cn.com.jslh.zjcdprogrect">

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

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

<application
   android:name=".common.MyApplication"
   android:allowBackup="true"
   android:icon="@mipmap/ic_launcher"
   android:label="@string/app_name"
   android:roundIcon="@mipmap/ic_launcher_round"
   android:supportsRtl="true"
   android:theme="@style/AppTheme">
   <activity android:name=".LoginActivity">
     <intent-filter>
       <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
   </activity>
   <activity android:name=".saoka.WorkActivity">
     <intent-filter>
       <action android:name="android.nfc.action.TAG_DISCOVERED" />
       <data android:mimeType="text/plain" />
     </intent-filter>
     <!--<meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" />-->
   </activity>
 </application>

</manifest>

package cn.com.jslh.zjcdprogrect.saoka;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import cn.com.jslh.zjcdprogrect.R;public class WorkActivity extends AppCompatActivity {  private NfcAdapter mNfcAdapter;  private PendingIntent pi;  private IntentFilter tagDetected;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_work);    //初始化NfcAdapter    mNfcAdapter = NfcAdapter.getDefaultAdapter(this);    //初始化PendingIntent    // 初始化PendingIntent,当有NFC设备连接上的时候,就交给当前Activity处理    pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass())        .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);    // 新建IntentFilter,使用的是第二种的过滤机制//    tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);//    tagDetected.addCategory(Intent.CATEGORY_DEFAULT);  }  @Override  protected void onNewIntent(Intent intent) {    super.onNewIntent(intent);    // 当前app正在前端界面运行,这个时候有intent发送过来,那么系统就会调用onNewIntent回调方法,将intent传送过来    // 我们只需要在这里检验这个intent是否是NFC相关的intent,如果是,就调用处理方法    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {      processIntent(intent);    }  }  @Override  protected void onResume() {    super.onResume();    mNfcAdapter.enableForegroundDispatch(this, pi, null, null);  }  /**   * Parses the NDEF Message from the intent and prints to the TextView   */  private void processIntent(Intent intent) {    //取出封装在intent中的TAG    Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);    String CardId =ByteArrayToHexString(tagFromIntent.getId());  }  public static void startActivity(Context context){    Intent intent = new Intent();    intent.setClass(context,WorkActivity.class);    context.startActivity(intent);  }  private String ByteArrayToHexString(byte[] inarray) {    int i, j, in;    String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",        "B", "C", "D", "E", "F" };    String out = "";    for (j = 0; j < inarray.length; ++j) {      in = (int) inarray[j] & 0xff;      i = (in >> 4) & 0x0f;      out += hex[i];      i = in & 0x0f;      out += hex[i];    }    return out;  }}

来源:http://blog.csdn.net/double0zhou/article/details/54021094

标签:android,nfc
0
投稿

猜你喜欢

  • 详解Spring的StringUtils踩坑记录

    2021-08-23 16:14:39
  • Spring整合WebSocket应用示例(上)

    2023-05-05 10:09:21
  • Android 多国语言value文件夹命名的方法

    2022-04-19 00:43:40
  • IDEA 2021.3 使用及idea2021.3.1激活使用方法

    2021-06-06 03:49:38
  • java中dart类详细讲解

    2022-01-23 13:01:13
  • c#实现16进制和字符串之间转换的代码

    2023-07-22 08:28:09
  • C语言关键字union的定义和使用详解

    2021-09-24 02:40:05
  • swing登录注册界面设计

    2023-11-24 17:27:21
  • Android编程实现应用自动更新、下载、安装的方法

    2021-11-15 11:21:39
  • Java Socket编程详解及示例代码

    2022-06-29 07:05:27
  • Java 详解垃圾回收与对象生命周期

    2022-01-21 02:54:43
  • C#实现的WINDOWS登录功能示例

    2022-09-04 05:10:03
  • 在.net应用程序中运行其它EXE文件的方法

    2023-11-08 08:34:43
  • android多媒体类VideoView使用方法详解

    2023-12-12 03:37:47
  • Android进程间大数据通信LocalSocket详解

    2023-05-21 04:21:23
  • Android自定义View绘制的方法及过程(二)

    2023-05-02 14:42:17
  • Android多媒体之VideoView视频播放器

    2023-11-12 14:38:35
  • native.js获取手机硬件基本信息实例代码android版

    2023-10-19 13:33:09
  • C#操作windows系统进程的方法

    2023-06-09 05:11:45
  • java设计模式之适配器模式

    2021-08-28 09:08:09
  • asp之家 软件编程 m.aspxhome.com