【问题标题】:How to pass Custom Object through NdefMessage如何通过 NdefMessage 传递自定义对象
【发布时间】:2016-11-13 19:20:49
【问题描述】:

关于stackoverflow的第一个问题。我试图说清楚并符合标准。我是 Android 开发新手,尤其是 NFC。我正在开发一个应用程序,您可以在其中创建和加入活动,有点像在 Facebook 上。我有一个 ListEvent 活动和一个 DisplayEvent 活动。当我从列表中选择一个事件时,它会打开 DisplayEvent 活动,其中包含有关我的事件的正确信息。

我希望当 X 在他的设备上打开事件 A 时,当他与 Y 进入 NFC 范围时,Y 现在在他的设备上拥有事件 A。我目前能够打开正确的活动,甚至可以将字符串从一部手机发送到另一部手机。我在网上搜索了很多,但我似乎无法弄清楚如何通过 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;
}

【问题讨论】:

    标签: android nfc ndef


    【解决方案1】:

    您可以使用NdefRecord.createExternal 函数创建一个包含应用程序特定数据的 NdefRecord。 documentation 描述了如何在 NdefRecord 中包含“有效负载”。您只需要将“自定义对象”转换为 described here 的字节数组。然后将其添加到新的 NdefRecord 并将其添加到您的 NdefMessage。

    【讨论】:

    • 非常感谢!!这很有帮助:)
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2018-12-30
    • 2021-12-24
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多