- package com.example.beamtest;
- /**
- * Time: 2012.8.11
- * Author: kehr
- * Aim: Test Android beam
- */
- import java.nio.charset.Charset;
- import android.app.Activity;
- import android.content.Intent;
- import android.nfc.NdefMessage;
- import android.nfc.NdefRecord;
- import android.nfc.NfcAdapter;
- import android.nfc.NfcAdapter.CreateNdefMessageCallback;
- import android.nfc.NfcEvent;
- import android.os.Bundle;
- import android.os.Parcelable;
- import android.view.Window;
- import android.view.WindowManager;
- import android.widget.EditText;
- import android.widget.Toast;
- public class Beam extends Activity implements CreateNdefMessageCallback {
- NfcAdapter mNfcAdapter;
- // TextView mEditText;
- EditText mEditText;@Override protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- // fullscreen
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- // no title
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.beam_layout);
- mEditText = (EditText) findViewById(R.id.beam_input_EditText);
- // 检测设备是否支持NFC
- mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
- if (mNfcAdapter == null) {
- Toast.makeText(this, "你的设备不支持", Toast.LENGTH_LONG).show();
- // 检测NFC是否开启
- } else if (mNfcAdapter.isEnabled()) {
- Toast.makeText(this, "NFC开启!", Toast.LENGTH_LONG).show();
- } else {
- Toast.makeText(this, "NFC未开启!请手动设置~", Toast.LENGTH_LONG).show();
- }
- // 注册回调函数
- mNfcAdapter.setNdefPushMessageCallback(this, this);
- }
- // 发送消息-------------------------------------------------------------------------
- // 这是CreateNdefMessageCallback中需要实现的方法
- @Override public NdefMessage createNdefMessage(NfcEvent event) {
- // TODO Auto-generated method stub
- // 获取文本框中的内容
- String text = mEditText.getText().toString();
- NdefMessage msg = new NdefMessage(new NdefRecord[] {
- createMimeRecord("application/com.example.android.beam", text.getBytes())
- });
- return msg;
- }
- 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;
- }
- // 消息发送完成的处理------------------------------------------------
- //------------不是主要功能,官方例子里面有,我给去掉了----------------待实现……
- // 处理接收的消息----------------------------------------------------------------------
- // 第一步,接收Intent
- @Override protected void onNewIntent(Intent intent) {
- // super.onNewIntent(intent);
- setIntent(intent);
- }
- // 第二步,判断Intent
- @Override protected void onResume() {
- // TODO Auto-generated method stub
- super.onResume();
- if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
- processIntent(getIntent());
- }
- }
- // 第三步。处理Intent
- 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
- mEditText.setText(new String(msg.getRecords()[0].getPayload()));
- }
- }
来源: http://lib.csdn.net/snippet/android/49947