一:將數據寫入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(); }