关于Android NFC 往标签写数据 跳转指定APP的指定界面

之前有需求,再扫描商品NFC标签的时候直接跳转到APP中的商品详情界面。提供的NFC标签没有数据,需要自己写入数据。

如何去写入标签数据 并指定跳转界面呢。这里做一下记录。

/**
     * 往标签写数据的方法
     */
    public void writeNFCTag() {
       Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{
                //三个参数 第一个 和 第二个 就是在清单文件中定义在接受的activity 
                //<intent-filter> 前缀  第三个是要写入的信息
                NdefRecord.createExternal("angel.touch.com", "nfc", content.getBytes()),
                //这里是要跳转到的APP的包名
                NdefRecord.createApplicationRecord("com.***.***.***")});
        //转换成字节获得大小
        int size = ndefMessage.toByteArray().length;
        try {
            //2.判断NFC标签的数据类型(通过Ndef.get方法)
            Ndef ndef = Ndef.get(tag);
            //判断是否为NDEF标签
            if (ndef != null) {
                ndef.connect();
                //判断是否支持可写
                if (!ndef.isWritable()) {
                    return;
                }
                //判断标签的容量是否够用
                if (ndef.getMaxSize() < size) {
                    return;
                }
                //3.写入数据
                ndef.writeNdefMessage(ndefMessage);
                Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();
            } else {
                //若标签为格式化按此步骤进行
                NdefFormatable format = NdefFormatable.get(tag);//Ndef格式类
                //判断是否获得了NdefFormatable对象,有一些标签是只读的或者不允许格式化的
                if (format != null) {
                    //连接
                    format.connect();
                    //格式化并将信息写入标签
                    format.format(ndefMessage);
                    Toast.makeText(this, "写入成功",
                            Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "写入失败", Toast.LENGTH_SHORT).show();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在读取NFC的APP中(包名与上面代码中createApplicationRecord写入时的包名相同) 的AndroidManifest.xml中声明Activity应该如下操作

<activity
   android:name=".activity.NFCProductActivity"
   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="/angel.touch.com:nfc"
          android:scheme="vnd.android.nfc" />
          <!-- //此处照写,标准写法-->
          <!--//这里是你后面写入的数据的一部分createExternal部分数据-->
          <!--//此处照写,标准写法-->
     </intent-filter>
</activity>
NdefRecord.createExternal("angel.touch.com", "nfc", content.getBytes());
android:pathPrefix="/angel.touch.com:nfc"

这两段代码中的定义的就是系统识别到NFC的信息后,会直接唤起APP的这个activity


版权声明:本文为luofayuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。