package com.ratebeer.android.gui.components.helpers; import android.annotation.TargetApi; import android.net.Uri; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.nfc.NfcAdapter.CreateNdefMessageCallback; import android.nfc.NfcEvent; import android.support.v4.app.Fragment; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.ratebeer.android.R; public class NfcHelper { private SherlockFragmentActivity activity; public NfcHelper(SherlockFragmentActivity activity) { this.activity = activity; } /** * If the device is new enough and supports/has enabled NFC, allow NFC message exchange through Android Beam. */ @TargetApi(14) public void startNfc() { if (android.os.Build.VERSION.SDK_INT >= 14) { NfcAdapter nfc = NfcAdapter.getDefaultAdapter(activity); if (nfc != null) nfc.setNdefPushMessageCallback(onCreateNfcMessage, activity); } } /** * Marshals the request to create a message (to send to the now-nearby device) to the currently shown Fragment. */ private CreateNdefMessageCallback onCreateNfcMessage = new CreateNdefMessageCallback() { @TargetApi(14) @Override public NdefMessage createNdefMessage(NfcEvent event) { // A device is close; ask the currently visible fragment to create a message Fragment content = activity.getSupportFragmentManager().findFragmentById(R.id.frag_content); if (content != null && content instanceof NdefUriProvider) return new NdefMessage(new NdefRecord[] { NdefRecord.createUri(((NdefUriProvider) content) .createNdefUri()) }); return null; } }; public interface NdefUriProvider { public Uri createNdefUri(); } }