2016-11-13 77 views
3

關於stackoverflow的第一個問題。我試圖說清楚並達到標準。我是Android開發新人,尤其是NFC。我正在研究一個可以創建和加入活動的應用程序,有點像在Facebook上。我有一個ListEvent活動和一個DisplayEvent活動。當我從列表中選擇一個事件時,它會使用關於我的事件的正確信息來打開DisplayEvent活動。如何通過NdefMessage傳遞自定義對象

我希望當X在他的設備上打開事件A時,當他使用Y進入NFC範圍時,Y現在在他的設備上有事件A.我目前能夠打開正確的活動,而且我甚至可以從一部手機發送一個字符串到另一個手機。我在網上搜索了很多,但我似乎無法弄清楚如何發送一個自定義的Oject,在我的情況下,一個事件,通過NFC而不是一個字符串。我還需要發送一個布爾值以及我的事件。它可能超級簡單,但我在那個上很笨。非常感謝你提前。

這是我的代碼。

清單:

<activity 
     android:name="vincent.ievennement.activity.DisplayEventActivity" 
     android:parentActivityName="vincent.ievennement.activity.ListeEventActivity"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="vincent.ievennement.activity.ListeEventActivity" /> 
     <intent-filter> 
      <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="text/plain" /> 
     </intent-filter> 
    </activity> 

的onResume:

protected void onResume() { 
    //Normal way to get my Event and my Boolean 
    event = (Event) getIntent().getSerializableExtra("MonEvent"); 
    participe = (boolean) getIntent().getSerializableExtra("Participe"); 

    //I prepare my message and make it ready to be sent when a device is into range 
    NdefMessage messageSend = createNdefMessage("SomeText"); 
    mNfcAdapter.setNdefPushMessage(messageSend, this); 


    Intent intent = getIntent(); 
    //If my activity is openned by NFC, proceed to get the message that was sent 
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { 
     Parcelable[] rawMessages = intent.getParcelableArrayExtra(
       NfcAdapter.EXTRA_NDEF_MESSAGES); 

     NdefMessage message = (NdefMessage) rawMessages[0]; // only one message transferred 
     Log.e("Test - ",new String(message.getRecords()[0].getPayload())); 

    } 


    super.onResume(); 

createNdefMessage:

public NdefMessage createNdefMessage(String message) { 
    NdefRecord ndefRecord = NdefRecord.createMime("text/plain", message.getBytes()); 
    NdefMessage ndefMessage = new NdefMessage(ndefRecord); 
    return ndefMessage; 
} 

回答

1

可以使用NdefRecord.createExternal函數來創建一個包含應用程序特定數據的NdefRecord。 documentation描述瞭如何在NdefRecord中包含「有效載荷」。您只需要將您的「自定義對象」轉換爲described here的字節數組。然後將其添加到新的NdefRecord並將其添加到您的NdefMessage。

+1

非常感謝!這非常有幫助:) –

相關問題