一:将数据写入NFC 标签

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

privatevoid 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(newNdefRecord[]{createRecord()});
            ndef.writeNdefMessage(ndefMsg);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
创建一个Record的举例,注释掉的是举例写一个url进去,到时候一扫描就会直接调用浏览器程序。没有注释的是尝试调用一个本地应用,只要一扫描就会直接启动应用
   privateNdefRecord 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。如果你和你的朋友都恰好有一部androidNFC手机,而且都是4.0的系统,那你们就可以玩一下了。把nfc功能打开,然后打开联系人界面,然后将两个手机背靠背放在一起,手指轻轻一点。你的联系人数据就会唰的一下飞到对方手机里去了。这个非常有意思,而且实现也很简单。
主要是在代码中的onCreate中要设置回调。       

mNfcAdapter.setNdefPushMessageCallback(this,this);
其中第一个this就是CreateNdefMessageCallback回调函数。他中间你要实现的也就是下面的createNdefMessage
第二个this,貌似指的是由哪一个activity来接受系统回调...好吧...没做实验我就不多说了怕误导自己
以下的代码全部为android文档中的示例代码,比较简单,也就是创建了一个字符串NdefMessage然后传过去。到时候,另外一个设备收到Intent后如何解析,你可以参看之前的过滤和解析博文
   publicNdefMessage 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) {

        // A handler is needed to send messages to the activity when this

        // callback occurs, because it happens from a binder thread

        mHandler.obtainMessage(MESSAGE_SENT).sendToTarget();