Androidプログラマへの道 〜 Moonlight 明日香 〜 - カードが書き込み可能かチェックする
NFCカード/タグにNdefメッセージを書き込み可能かチェックするには, NFCカード/タグがNdefに対応している必要があるので, インテント"android.nfc.action.NDEF_DISCOVERED"が発行されることを利用する.
注) Ndefに未対応のNFCカード/タグでは, インテント"android.nfc.action.NDEF_DISCOVERED"は発行されない.

書き込み可能かチェック

  • Nfc03.java
    • Intent#getIntentメソッドで, Intentのインスタンスを取得する.
    • インテントのアクションが, "ACTION_NDEF_DISCOVERED"かチェックする.
    • Intent#getParcelableArrayExtraメソッドに, NfcAdapter.EXTRA_TAGを指定して, Tagのインスタンスを取得する.
    • Ndef#getメソッドで, Ndefのインスタンスを取得する.
    • Ndef#connectメソッドで, NFCカード/タグに接続する.
    • Ndef#isWritableメソッドで, NFCカード/タグに書き込み可能がチェックする.
    • Ndef#closeメソッドで, 接続を終了する.
package com.moonlight_aska.android.nfc03;

import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.widget.TextView;

public class Nfc03 extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_nfc03);

    TextView text = (TextView)findViewById(R.id.tag_id);
    // インテントの取得
    Intent intent = getIntent();
    // NDEF対応カードの検出かチェック
    String action = intent.getAction();
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
      // 書き込み可能かチェック
      Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
      Ndef ndef = Ndef.get(tag);
      String str = "";
      try {
        ndef.connect();
        if (ndef.isWritable()) {
          str = "The tag is Writable.";
        }
        else {
          str = "The tag isn't writable.";
        }
        ndef.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      text.setText(str);
    }
  }
}
  • AndroidManifest.xml
Ndefメッセージを取得するを参照.
  • 動作例
MiniTrack NXP NTAG203