Android应用程序中添加多发纪录NFC标签 [英] Android app to add mutiple record in NFC tag

查看:171
本文介绍了Android应用程序中添加多发纪录NFC标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我是开发Android应用程序的初学者,现在我需要写一些数据到一个NF​​C标签,检查自己的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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆