欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android NFC 写入包名,NDEF数据,唤醒 指定 APP 跳转 指定 页面Activity,读取数据处理

程序员文章站 2022-03-18 23:49:23
先放GITHUB 链接,可以直接跑一下代码体验一下https://github.com/TracyEminem/NFCNDEF配置NFC相关的权限
先放GITHUB 链接,可以直接跑一下代码体验一下https://github.com/TracyEminem/NFCNDEF 配置NFC相关的权限
<!-- 添加NFC权限 -->
<uses-permission android:name="android.permission.NFC" /> <!-- 要求当前设备必须要有NFC芯片 -->
<uses-feature
    android:name="android.hardware.nfc"
    android:required="true" />

接收的activity应该这样设置,加上intent filter,利用intent filter来启动指定的activity

<activity
    android:name=".NfcReadActivity"
    android:launchMode="singleInstance">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="ext"  //此处照写,标准写法
            android:pathPrefix="/vndcn.com:nfc"//这里是你后面写入的数据的一部分createexternal部分数据
           android:scheme="vnd.android.nfc" />  //此处照写,标准写法  
 </intent-filter>
</activity>

写入包名和数据

NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{NdefRecord.createExternal("vndcn.com", "nfc", content.getBytes()),NdefRecord.createApplicationRecord("com.mobile.cloud.nfcnde")});
//可以添加多条记录,content就是你要写入的内容,createApplicationRecord就是吸入你的包名

//下面是如何读取NFC写入的信息。

 private String getCardId(Intent intent) {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        byte[] bytesId = tagFromIntent.getId();
        readNfcTag(intent);
        Ndef ndef = Ndef.get(tagFromIntent);
        return byteArrayToHexString(bytesId);
    }
 private void readNfcTag(Intent intent) {
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
                    NfcAdapter.EXTRA_NDEF_MESSAGES);
            NdefMessage msgs[] = null;
            int contentSize = 0;
            if (rawMsgs != null) {
                msgs = new NdefMessage[rawMsgs.length];
                for (int i = 0; i < rawMsgs.length; i++) {
                    msgs[i] = (NdefMessage) rawMsgs[i];
                    contentSize += msgs[i].toByteArray().length;
                }
            }
            try {
                if (msgs != null) {
                    NdefRecord record = msgs[0].getRecords()[0];
//                    String textRecord = parseTextRecord(record);
                    byte[] payload = record.getPayload();
                    String res = new String(payload);
                    mContent.setText("content url is: "+res);
                }
            } catch (Exception e) {
            }
        }
    }

本文地址:https://blog.csdn.net/qq_16624353/article/details/107909000

相关标签: nfc android