NDEF Message Senden ?


Code46

Erfahrenes Mitglied
Hi Leute,

Bin der neue Frischling im Android Development und wollte gerne Frage ob ihr vielleicht mal mein Code anschauen könnt ?

Ich habe 2 TextFields die ich übergeben will, aber weis nicht ob ich das so richtig gemacht habe. Mommentan bekomme ich nur den String vom ersten TextField also Peter Smith übergeben.

Hier mein Code:

Code:
package zed.test.nfc;

import zed.test.nfc.R;
import android.app.Activity;
import android.content.Intent;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateNdefMessageCallback;
import android.nfc.NfcAdapter.OnNdefPushCompleteCallback;
import android.nfc.NfcEvent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.provider.Settings;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;



public class MainActivity extends Activity implements CreateNdefMessageCallback,
        OnNdefPushCompleteCallback {
    NfcAdapter mNfcAdapter;
    TextView beamMsg;
    TextView beamMsg2;
    private static final int MESSAGE_SENT = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        beamMsg = (TextView) findViewById(R.id.msg);
        beamMsg2 = (TextView) findViewById(R.id.msg_ID);
        beamMsg.setText("Peter Smith");
        beamMsg2.setText("123456");
        
        // Check for available NFC Adapter
        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
        if (mNfcAdapter == null) {
            beamMsg = (TextView) findViewById(R.id.msg);
            beamMsg2= (TextView) findViewById(R.id.msg_ID);
            
            beamMsg.setText("NFC is not available on this device.");
            beamMsg2.setText("NFC is not available on this device.");
        } else {
            // Register callback to set NDEF message
            mNfcAdapter.setNdefPushMessageCallback(this, this);
            // Register callback to listen for message-sent success
            mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
        }
    }

    public void submitClicked(View v)
    {
    	Toast toast = Toast.makeText(getApplicationContext(), R.string.info,
        		Toast.LENGTH_LONG);
        toast.show();
    }
    /**
     * Implementation for the CreateNdefMessageCallback interface
     */
    @Override
    public NdefMessage createNdefMessage(NfcEvent event) {
        NdefMessage msg = new NdefMessage(NdefRecord.createMime(
                beamMsg.getText()  .toString(), null));
      
        return msg;

    }

    public NdefMessage createNdefMessage_two(NfcEvent event) {
        NdefMessage msg2 = new NdefMessage(NdefRecord.createMime(
                beamMsg2.getText()  .toString(), null));
      
        return msg2;

    }
    
    
    

    /**
     * Implementation for the OnNdefPushCompleteCallback interface
     */
    @Override
    public void onNdefPushComplete(NfcEvent arg0) {
        // A handler is needed to send messages to the activity when this
        // callback occurs, because it happens from a binder thread
        mHandler.obtainMessage(MESSAGE_SENT).sendToTarget();
    }

    /** This handler receives a message from onNdefPushComplete */
    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MESSAGE_SENT:
                Toast.makeText(getApplicationContext(), "Message sent!", Toast.LENGTH_LONG).show();
                break;
            }
        }
    };

    @Override
    public void onResume() {
        super.onResume();
        // Check to see that the Activity started due to an Android Beam
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
            processIntent(getIntent());
        }
    }

    @Override
    public void onNewIntent(Intent intent) {
        // onResume gets called after this to handle the intent
        setIntent(intent);
    }

    /**
     * Parses the NDEF Message from the intent and prints to the TextView
     */
    void processIntent(Intent intent) {
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
                NfcAdapter.EXTRA_NDEF_MESSAGES);
        // only one message sent during the beam
        NdefMessage msg = (NdefMessage) rawMsgs[0];
        NdefMessage msg2 = (NdefMessage) rawMsgs[1];
        // record 0 contains the MIME type, record 1 is the AAR, if present
        beamMsg.setText(new String(msg.getRecords()[0].getPayload()));
        beamMsg2.setText(new String(msg.getRecords()[1].getPayload()));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // If NFC is not available, we won't be needing this menu
        if (mNfcAdapter == null) {
            return super.onCreateOptionsMenu(menu);
        }
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_settings:
                Intent intent = new Intent(Settings.ACTION_NFCSHARING_SETTINGS);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
 

Code46

Erfahrenes Mitglied
Habe das problm gelöst. Hier ist die Antwort:
Es ist nicht möglich zwei NDEF messages zu versenden. Jedoch kann man in einer NDEF Message mehrere messages einbinden und dann versenden.
Code:
String id = (" "+beamMsg2.getText().toString());
        NdefMessage msg = new NdefMessage(NdefRecord.createMime(
                beamMsg.getText()  .toString(), id.getBytes())
Ich hoffe dies wird auch anderen helfen.

Danke
 

Neue Beiträge