您的位置:首页 -> 编程开发 -> 教程专题 -> 安卓(android)系统 -> NFC开发实战

安卓(android)系统 ↓

第一部分:安卓手机选购

第二部分:安卓手机使用

第三部分:安卓刷机破解

第四部分:安卓应用开发

相关教程专题

安卓(android)系统 : NFC开发实战

出处:番薯学院 时间:2013-03-07 人气:826

  对于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!\n\n" +

  "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);

  }

  }

  }

【最新评论!】
【不懂就要问?】
昵   称: * 必填
验证码:      
 

评论最长字数:1000

 
◎欢迎参与讨论,不懂就要问。