2012-07-11 118 views
1

大家好,我是开发android应用程序的初学者,目前我需要将一些数据写入NFC标签来检查我自己的NFC读卡器程序,但是,我可以试试这些应用程序只能在标签中写入一条记录,这与我的要求有一些内部记录和最后一条AAR记录是不匹配的,所以我想问问任何人是否知道任何可以提供此功能的应用程序,或者任何人已经写过这样的记录程序之前?谢谢!Android应用程序在NFC标签中添加多条记录

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


} 
+0

你试了一下自己?请显示一些源代码。 – 2012-07-11 12:00:48

+0

请接受我最近不能在这里发布我的代码,因为我仍然不清楚逻辑,所以我需要一些示例代码来帮助自己。我正在利用这个样本http://www.jessechen.net/blog/how-to-nfc-on-the-android-platform/我之所以感到困惑的原因是因为我想添加一些EditView和一个Button,所以我可以自己输入值,但是使用这种设计,我不确定应该如何修改意图,因为写入操作应该是一个新功能,当我点击按钮 – Conrad 2012-07-11 13:52:37

+0

时会执行对不起我昨天晚上无法提供源代码,因为我把它留在了大学里。 – Conrad 2012-07-12 01:53:44

回答

3

您需要在清单文件中给您的应用NFC支持。

+0

哦,谢谢你,我添加了意图过滤器,但忘了添加权限。 – Conrad 2012-07-12 02:30:24

+0

如果您认为我的答案是肯定的,请点击勾号标记为答案。 – Brad 2012-07-12 02:36:16

+0

我可以成功地打开应用程序并立即在EditText中键入数据,但是,SetTag和写入标记功能不起作用。我已经在按钮中声明了当它被点击时调用setTag函数 – Conrad 2012-07-12 02:53:22

1

看一看this(无耻插头)NFC Eclipse插件编辑NDEF消息,包括在单一消息的多个记录。还有一个针对android的项目样板文件,我想这就是您要查找的内容(?)。

相关问题