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

先放GITHUB 链接,可以直接跑一下代码体验一下https://github.com/TracyEminem/NFCNDEF

配置NFC相关的权限

看一下GIF的效果

 

 

<!-- 添加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) {
            }
        }
    }

 

 

 

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
以下是一个基本的Android NFC读取数据的代码示例: ``` private NfcAdapter nfcAdapter; private PendingIntent pendingIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); nfcAdapter = NfcAdapter.getDefaultAdapter(this); pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()) .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); } @Override protected void onResume() { super.onResume(); if (nfcAdapter != null) { nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null); } } @Override protected void onPause() { super.onPause(); if (nfcAdapter != null) { nfcAdapter.disableForegroundDispatch(this); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); if (tag != null) { readFromTag(tag); } } } private void readFromTag(Tag tag) { Ndef ndef = Ndef.get(tag); if (ndef != null) { try { ndef.connect(); NdefMessage message = ndef.getNdefMessage(); if (message != null) { NdefRecord[] records = message.getRecords(); if (records != null && records.length > 0) { String payload = new String(records[0].getPayload(), Charset.forName("UTF-8")); // Do something with the payload } } } catch (IOException | FormatException e) { e.printStackTrace(); } finally { try { ndef.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 这段代码首先获取默认的NFC适配器和一个用于处理NFC意图的PendingIntent,然后在 onResume() 方法中启用前台调度以确保应用程序在前台时可以接收NFC意图。在 onPause() 方法中,我们禁用前台调度以节省电池寿命。在 onNewIntent() 方法中,我们检查接收到的意图是否是一个标签发现意图,如果是,则读取标签并将其传递给 readFromTag() 方法。在 readFromTag() 方法中,我们首先获取该标签是否支持NDEF格式,并连接到该标签。如果连接成功,我们尝试从标签中读取NDEF消息,并从第一个记录中获取有效载荷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值