android nfc(三)

一:将数据写入NFC 标签android

   往可读写的nfc标签中写tag相比读什么的要简单一点。固然这主要是由于,我在这里只讲如何写ndef数据。简单归纳一下就是本身构造一个或多个NdefRecord而后将他们封装到一个NdefMessage中。而后将这个message写入就能够了。web

 

    private void writeNdefTag(Intent in){
        Tag tag = in.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        Ndef ndef = Ndef.get(tag);
        try {数组

//这一句别丢了,读nfc标签的时候不须要这句,由于那时数据直接就在intent中。
            ndef.connect(); 浏览器

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

            NdefMessage ndefMsg = new NdefMessage(new NdefRecord[]{createRecord()});
            ndef.writeNdefMessage(ndefMsg);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }ide

 

建立一个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")));
    }this

 

 

二:Android Beamurl

    再来说讲android 4.0以后的新特性,android beam。若是你和你的朋友都刚好有一部android NFC手机,并且都是4.0的系统,那大家就能够玩一下了。把nfc功能打开,而后打开联系人界面,而后将两个手机背靠背放在一块儿,手指轻轻一点。你的联系人数据就会唰的一下飞到对方手机里去了。这个很是有意思,并且实现也很简单。spa

主要是在代码中的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 = newNdefRecord( NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload); returnmimeRecord; }
 [object Object]
固然系统中有关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();   }
相关文章
相关标签/搜索