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();   }
相關文章
相關標籤/搜索