最終更新:
moonlight_aska 2012年09月17日(月) 22:24:31履歴
NFCカード/タグにNdefメッセージを書き込むには, NFCカード/タグがNdefに対応している必要があるので, インテント"android.nfc.action.NDEF_DISCOVERED"が発行されることを利用する.
注) Ndefに未対応のNFCカード/タグでは, インテント"android.nfc.action.NDEF_DISCOVERED"は発行されない.

↓(NFC TagInfoで確認)

注) Ndefに未対応のNFCカード/タグでは, インテント"android.nfc.action.NDEF_DISCOVERED"は発行されない.
- Nfc04.java
- 入力文字列を"text/plain"でNdefレコードデータを作成する.
- NdefレコードからNdefメッセージを作成する.
- Intent#getByteArrayExtraメソッドに, NfcAdapter.EXTRA_TAG指定して, Tagのインスタンスを取得する.
- Ndef#getメソッドで, Ndefのインスタンスを取得する.
- Ndef#connectメソッドで, NFCカード/タグに接続する.
- Ndef#writeNdefMessageメソッドで, Ndefメッセージを書き込む.
- Ndef#closeメソッドで, 接続を終了する.
package com.moonlight_aska.anroid.nfc04;
import java.io.IOException;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.SpannableStringBuilder;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Nfc04 extends Activity {
private Intent intent = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nfc04);
Button btn = (Button)findViewById(R.id.btn_id);
intent = getIntent();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText edit = (EditText)findViewById(R.id.edit_id);
if (edit.length() > 0) {
SpannableStringBuilder sp = (SpannableStringBuilder)edit.getText();
// ICタグへの書き込み
try {
writeTag(intent, sp.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
private void writeTag(Intent intent, String text) throws IOException, FormatException {
String action = intent.getAction();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
// Ndefメッセージの生成
NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
"text/plain".getBytes(), new byte[]{}, text.getBytes());
NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
// Ndefメッセージの書き込み
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Ndef ndef = Ndef.get(tag);
ndef.connect();
ndef.writeNdefMessage(msg);
Log.v("NFC", "write " + text);
ndef.close();
}
}
}
- res/AndroidManifest.xml
- 動作例

↓(NFC TagInfoで確認)

コメントをかく