2016-11-13 7 views
3

最初の質問on stackoverflow。私はそれを明確にし、基準を定めようとしました。私はAndroid開発と特にNFCの新機能です。私はあなたがイベントを作成して参加することができるアプリケーションに取り組んでいます。これはFacebookのようなものです。私はListEventアクティビティとDisplayEventアクティビティを持っています。自分のリストからイベントを選択すると、自分のイベントに関する正しい情報でDisplayEventアクティビティが開かれます。NdefMessageを介してカスタムオブジェクトを渡す方法

Xが自分のデバイスでイベントAを開いているとき、YでNFCの範囲に入ると、Yは自分のデバイスにイベントAを持っています。私は現在、適切なアクティビティを開くことができます。また、ある電話から別の電話にStringを送信することもできます。私はオンラインでたくさんの検索をしましたが、私はカスタムのオブジェクトを、イベントの場合はStringの代わりに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を作成するためにNdefRecord.createExternal機能を使用することができます。 documentationには、NdefRecordに「ペイロード」を含める方法が記載されています。あなたは単に "カスタムオブジェクト"をdescribed hereのバイト配列に変換する必要があります。それを新しいNdefRecordに追加し、それをNdefMessageに追加します。

+1

ありがとうございます!それは非常に有用だった:) –

関連する問題