首页 > 系统 > Android > 正文

Android实现读取NFC卡卡号示例

2019-12-12 04:07:41
字体:
来源:转载
供稿:网友

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;  }}

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表