您的位置:首页 > 移动开发 > Android开发

Android NFC开发读写NDEF数据实例

2015-07-14 17:16 459 查看
一、Android 4.0提供的Demo

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

}



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

}



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


}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: