android nfc url,android NFC学习笔记(三)

一:将数据写入NFC 标签

往可读写的nfc标签中写tag相比读什么的要简单一点。当然这主要是因为,我在这里只讲如何写ndef数据。简单概括一下就是自己构造一个或多个NdefRecord然后将他们封装到一个NdefMessage中。然后将这个message写入就可以了。

private void writeNdefTag(Intent in){

Tag tag = in.getParcelableExtra(NfcAdapter.EXTRA_TAG);

Ndef ndef = Ndef.get(tag);

try {

//这一句别丢了,读nfc标签的时候不需要这句,因为那时数据直接就在intent中。

ndef.connect();

//构造一个合适的NdefMessage。你可以看到代码里用了NdefRecord数组,只不过这个数组里只有一个record

NdefMessage ndefMsg = new NdefMessage(new NdefRecord[]{createRecord()});

ndef.writeNdefMessage(ndefMsg);

} catch (IOException e) {

e.printStackTrace();

} catch (FormatException e) {

e.printStackTrace();

}

}

创建一个Record的举例,注释掉的是举例写一个url进去,到时候一扫描就会直接调用浏览器程序。没有注释的是尝试调用一个本地应用,只要一扫描就会直接启动应用

private NdefRecord createRecord(){

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI,

"http://www.sohu.com".getBytes(Charset.forName("US-ASCII")),

new byte[0], new byte[0]);

return new NdefRecord(

NdefRecord.TNF_MIME_MEDIA ,

"application/com.android.TestNfc".getBytes(Charset.forName("US-ASCII")),

new byte[0], "com.android.yufeimusic".getBytes(Charset.forName("US-ASCII")));

}

二:Android Beam

再来讲讲android 4.0之后的新特性,android beam。如果你和你的朋友都恰好有一部android NFC手机,而且都是4.0的系统,那你们就可以玩一下了。把nfc功能打开,然后打开联系人界面,然后将两个手机背靠背放在一起,手指轻轻一点。你的联系人数据就会唰的一下飞到对方手机里去了。这个非常有意思,而且实现也很简单。

主要是在代码中的onCreate中要设置回调。

mNfcAdapter.setNdefPushMessageCallback(this, this);

其中第一个this就是CreateNdefMessageCallback 回调函数。他中间你要实现的也就是下面的createNdefMessage

第二个this,貌似指的是由哪一个activity来接受系统回调...好吧...没做实验我就不多说了怕误导自己

以下的代码全部为android文档中的示例代码,比较简单,也就是创建了一个字符串NdefMessage然后传过去。到时候,另外一个设备收到Intent后如何解析,你可以参看之前的过滤和解析博文

public NdefMessage createNdefMessage(NfcEvent event) {

Time time = new Time();

time.setToNow();

String text = ("Beam me up!\n\n" + "Beam Time: " + time.format("%H:%M:%S"));

NdefMessage msg = new NdefMessage(

new NdefRecord[] { createMimeRecord(

"application/com.example.android.beam", text.getBytes()),

NdefRecord.createApplicationRecord("com.example.android.beam")

});

return msg;

}

public NdefRecord createMimeRecord(String mimeType, byte[] payload) {

byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));

NdefRecord mimeRecord =

new NdefRecord( NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);

return mimeRecord;

}

当然系统中有关android beam的不会只有这一个回调。比如还有

mNfcAdapter.setOnNdefPushCompleteCallback(this, this);

这个回调主要是用来当你的NdefMessage发送到对方成功之后,你要干什么的一个回调函数。

比如你可以向用户主线程发一个handler或者自己弹出个toast都是可以的。

@Override

public void onNdefPushComplete(NfcEvent arg0) {

mHandler.obtainMessage(MESSAGE_SENT).sendToTarget();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值