Android NFC開發實戰

來源:互聯網
上載者:User

  對於Android 4.0 SDK中提供的Beam例子,對於NFC開發來說的確是一個不錯的模板。對於瞭解NFC的NDEF訊息處理過程不妨看下面的代碼。

  public class Beam extends Activity implements CreateNdefMessageCallback,

  OnNdefPushCompleteCallback {

  NfcAdapter mNfcAdapter;

  TextView mInfoText;

  private static final int MESSAGE_SENT = 1;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  mInfoText = (TextView) findViewById(R.id.textView);

  mNfcAdapter = NfcAdapter.getDefaultAdapter(this); //執行個體化NFC裝置

  if (mNfcAdapter == null) {

  mInfoText = (TextView) findViewById(R.id.textView);

  mInfoText.setText("NFC is not available on this device.");

  }

  

  mNfcAdapter.setNdefPushMessageCallback(this, this); //註冊NDEF回調訊息

  mNfcAdapter.setOnNdefPushCompleteCallback(this, this);

  }

  

  @Override

  public NdefMessage createNdefMessage(NfcEvent event) {

  Time time = new Time();

  time.setToNow();

  String text = ("Beam me up!nn" +

  "Beam Time: " + time.format("%H:%M:%S"));

  NdefMessage msg = new NdefMessage(

  new NdefRecord[] { createMimeRecord(

  "application/com.example.android.beam", text.getBytes())

  });

  return msg;

  }

  @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();

  }

  private final Handler mHandler = new Handler() {

  @Override

  public void handleMessage(Message msg) {

  switch (msg.what) {

  case MESSAGE_SENT:

  Toast.makeText(getApplicationContext(), "Message sent!", Toast.LENGTH_LONG).show();

  break;

  }

  }

  };

  @Override

  public void onResume() {

  super.onResume();

  if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {

  processIntent(getIntent());

  }

  }

  @Override

  public void onNewIntent(Intent intent) {

  // onResume gets called after this to handle the intent

  setIntent(intent);

  }

  /**

  * Parses the NDEF Message from the intent and prints to the TextView

  */

  void processIntent(Intent intent) {

  Parcelable[] rawMsgs = intent.getParcelableArrayExtra(

  NfcAdapter.EXTRA_NDEF_MESSAGES);

  // only one message sent during the beam

  NdefMessage msg = (NdefMessage) rawMsgs[0];

  // record 0 contains the MIME type, record 1 is the AAR, if present

  mInfoText.setText(new String(msg.getRecords()[0].getPayload()));

  }

  /**

  * Creates a custom MIME type encapsulated in an NDEF record

  *

  * @param mimeType

  */

  public NdefRecord createMimeRecord(String mimeType, byte[] payload) {

  byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));

  NdefRecord mimeRecord = new NdefRecord(

  NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);

  return mimeRecord;

  }

  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

  // If NFC is not available, we won't be needing this menu

  if (mNfcAdapter == null) {

  return super.onCreateOptionsMenu(menu);

  }

  MenuInflater inflater = getMenuInflater();

  inflater.inflate(R.menu.options, menu);

  return true;

  }

  @Override

  public boolean onOptionsItemSelected(MenuItem item) {

  switch (item.getItemId()) {

  case R.id.menu_settings:

  Intent intent = new Intent(Settings.ACTION_NFCSHARING_SETTINGS);

  startActivity(intent);

  return true;

  default:

  return super.onOptionsItemSelected(item);

  }

  }

  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.