Android应用程序中添加多发纪录NFC标签 [英] Android app to add mutiple record in NFC tag
问题描述
大家好,我是开发Android应用程序的初学者,现在我需要写一些数据到一个NFC标签,检查自己的NFC读取器程序,但这些应用程序,我可以尝试只能写一个记录到标签,不符合我的要求匹配有几个记录中,并在年底的AAR记录,所以我想问一下,如果有人知道的任何应用程序,它可以提供此功能或任何人之前已经写了这样一个程序?谢谢!
公共类作家延伸活动{
NfcAdapter mAdapter;
PendingIntent mPendingIntent;
IntentFilter的mWriteTagFilters [];
布尔mWriteMode;
标签detectedTag;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_writer);
mAdapter = NfcAdapter.getDefaultAdapter(本);
mPendingIntent = PendingIntent.getActivity(此,0,
新意图(本,的getClass())addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0)。
IntentFilter的tagDetected =新的IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
mWriteTagFilters =新的IntentFilter [] {tagDetected};
// enableTagWriteMode();
//意向意图= getIntent();
}
私人无效enableTagWriteMode(){
mWriteMode = TRUE;
mAdapter.enableForegroundDispatch(这一点,mPendingIntent,mWriteTagFilters,NULL);
}
私人无效disableTagWriteMode(){
mWriteMode = FALSE;
mAdapter.disableForegroundDispatch(本);
}
公共无效SetTag(查看视图){
EditText上editText1 =(EditText上)findViewById(R.id.edit_message1);
EditText上editText2 =(EditText上)findViewById(R.id.edit_message2);
。字符串MESSAGE1 = editText1.getText()的toString();
。字符串消息2 = editText2.getText()的toString();
byte []的textBytes1 = message1.getBytes();
byte []的textBytes2 = message2.getBytes();
NdefRecord textRecord1 =新NdefRecord(NdefRecord.TNF_WELL_KNOWN,
message1.getBytes(),新的byte [] {},textBytes1);
NdefRecord textRecord2 =新NdefRecord(NdefRecord.TNF_WELL_KNOWN,
message2.getBytes(),新的byte [] {},textBytes2);
NdefMessage mNdefMessage =新NdefMessage(
新NdefRecord [] {
textRecord1,
textRecord2,
NdefRecord.createApplicationRecord(android.reader)
}
);
writeTag(mNdefMessage,detectedTag);
}
公共静态无效writeTag(NdefMessage消息,标签标签){
。INT大小= message.toByteArray()长;
尝试 {
NDEF NDEF = Ndef.get(标签);
如果(NDEF!= NULL){
ndef.connect();
如果(ndef.isWritable()&安培;&安培; ndef.getMaxSize()>大小)
ndef.writeNdefMessage(消息);
}其他{
NdefFormatable格式= NdefFormatable.get(标签);
如果(格式!= NULL){
尝试 {
format.connect();
format.format(消息);
}赶上(IOException异常E){
}
}
}
}赶上(例外五){
}
}
@覆盖
保护无效onNewIntent(意向意图){
如果(mWriteMode&安培;&安培; NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()))
detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}
@覆盖
公共无效的onPause(){
super.onPause();
disableTagWriteMode();
}
@覆盖
公共无效onResume(){
super.onResume();
enableTagWriteMode();
}
}
您需要给在清单文件中的应用程序支持NFC。
everyone, I am a beginner of developing android app, currently I need to write some data into a NFC tag to check my own NFC reader program, however, those app I can try can only write one record into the tag, which do not match with my requirement to have several record inside and an AAR record at the end, so I would like to ask if anyone know any app which can provide this functionality or anyone has written such a program before?Thank you!
public class Writer extends Activity {
NfcAdapter mAdapter;
PendingIntent mPendingIntent;
IntentFilter mWriteTagFilters[];
boolean mWriteMode;
Tag detectedTag;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_writer);
mAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
mWriteTagFilters = new IntentFilter[] { tagDetected };
//enableTagWriteMode();
//Intent intent = getIntent();
}
private void enableTagWriteMode(){
mWriteMode = true;
mAdapter.enableForegroundDispatch(this, mPendingIntent, mWriteTagFilters, null);
}
private void disableTagWriteMode(){
mWriteMode = false;
mAdapter.disableForegroundDispatch(this);
}
public void SetTag(View view){
EditText editText1 = (EditText) findViewById(R.id.edit_message1);
EditText editText2 = (EditText) findViewById(R.id.edit_message2);
String message1 = editText1.getText().toString();
String message2 = editText2.getText().toString();
byte[] textBytes1 = message1.getBytes();
byte[] textBytes2 = message2.getBytes();
NdefRecord textRecord1 = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
message1.getBytes(), new byte[]{}, textBytes1);
NdefRecord textRecord2 = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
message2.getBytes(), new byte[]{}, textBytes2);
NdefMessage mNdefMessage = new NdefMessage(
new NdefRecord[]{
textRecord1,
textRecord2,
NdefRecord.createApplicationRecord("android.reader")
}
);
writeTag(mNdefMessage, detectedTag);
}
public static void writeTag(NdefMessage message, Tag tag){
int size = message.toByteArray().length;
try {
Ndef ndef = Ndef.get(tag);
if (ndef != null){
ndef.connect();
if (ndef.isWritable() && ndef.getMaxSize() > size)
ndef.writeNdefMessage(message);
}else{
NdefFormatable format = NdefFormatable.get(tag);
if (format != null) {
try {
format.connect();
format.format(message);
}catch(IOException e){
}
}
}
}catch(Exception e){
}
}
@Override
protected void onNewIntent(Intent intent){
if(mWriteMode && NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()))
detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}
@Override
public void onPause(){
super.onPause();
disableTagWriteMode();
}
@Override
public void onResume(){
super.onResume();
enableTagWriteMode();
}
}
You need to give your application NFC support in the manifest file.
这篇关于Android应用程序中添加多发纪录NFC标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!