之前有需求,再扫描商品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版权协议,转载请附上原文出处链接和本声明。