package jp.tomorrowkey.android.ndeftoolsdemo; import android.content.Intent; import android.nfc.NdefMessage; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import org.ndeftools.Message; import org.ndeftools.util.activity.NfcTagWriterActivity; import org.ndeftools.wellknown.Action; import org.ndeftools.wellknown.ActionRecord; import org.ndeftools.wellknown.SmartPosterRecord; import org.ndeftools.wellknown.TextRecord; import org.ndeftools.wellknown.UriRecord; public class MainActivity extends NfcTagWriterActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // NFCの検出を有効にします setDetecting(true); } /** * NFC機能がない場合に呼ばれます */ @Override protected void onNfcFeatureNotFound() { Toast.makeText(this, "お使いの端末はNFCに対応していません", Toast.LENGTH_SHORT).show(); finish(); } /** * NFC機能はあるが、有効になっていない場合に呼ばれます<br> * 設定アプリにてNFCを有効にすればNFCが使えます */ @Override protected void onNfcStateDisabled() { Toast.makeText(this, "NFCが有効になっていません\n設定アプリでNFCを有効にしてください", Toast.LENGTH_SHORT).show(); Intent intent = new Intent("android.settings.NFC_SETTINGS"); startActivity(intent); } /** * NFCが使える状態の際に呼ばれます */ @Override protected void onNfcStateEnabled() { Toast.makeText(this, "NFCが使えます", Toast.LENGTH_SHORT).show(); } /** * NFC機能の状態が変化した場合に呼ばれます<br> * (ex. NFC OFF -> ON, ON -> OFF) * * @param enabled */ @Override protected void onNfcStateChange(boolean enabled) { String message = String.format("NFCが%sになりました", enabled ? "有効" : "無効"); Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } /** * 書き込むNDEFメッセージを作成するためのメソッドです<br> * 書き込み直前に呼ばれます */ @Override protected NdefMessage createNdefMessage() { // NDEFレコードの作成 TextRecord title = new TextRecord("Android"); UriRecord uri = new UriRecord("http://www.android.com/"); ActionRecord action = new ActionRecord(Action.DEFAULT_ACTION); SmartPosterRecord smartPosterRecord = new SmartPosterRecord(title, uri, action); // NDEFメッセージの作成 Message message = new Message(); message.add(smartPosterRecord); return message.getNdefMessage(); } /** * NDEFに対応していないNFCタグを検出した際に呼ばれます */ @Override protected void writeNdefCannotWriteTech() { Toast.makeText(this, "このNFCタグはNDEFに対応していません。\n違うNFCタグをかざしてください。", Toast.LENGTH_SHORT) .show(); } /** * NFCタグが書き込み禁止になっている場合に呼ばれます */ @Override protected void writeNdefNotWritable() { Toast.makeText(this, "このNFCタグは書き込み禁止になっています。\n違うNFCタグをかざしてください。", Toast.LENGTH_SHORT) .show(); } /** * 書き込もうとしたNDEFメッセージのサイズが大きすぎた場合に呼ばれます * * @param required 書き込もうとしたNDEFメッセージのサイズ * @param capacity 検出されたNFCタグに書き込み可能なサイズ */ @Override protected void writeNdefTooSmall(int required, int capacity) { Toast.makeText(this, "NFCタグのメモリが小さすぎて書き込めません。\n違うNFCタグをかざしてください。", Toast.LENGTH_SHORT) .show(); } /** * NDEFの書き込みに成功した際に呼ばれます */ @Override protected void writeNdefSuccess() { Toast.makeText(this, "書き込みに成功しました", Toast.LENGTH_SHORT).show(); } /** * 書き込みに失敗した際に呼ばれます */ @Override protected void writeNdefFailed(Exception e) { Log.d("Ndef tools for Android demo", "An exception has been occured", e); Toast.makeText(this, "書き込みに失敗しました。\nもう一度NFCタグをかざしてください。", Toast.LENGTH_SHORT).show(); } }