java – Android Beam – 如何传输正确的数据?
发布时间:2020-12-15 02:33:42 所属栏目:Java 来源:网络整理
导读:我现在正在进行一个 android梁项目.我从 Android开发人员那里复制了一个测试类. 我的问题是发送正确的数据.如果我将(p2p)与另一台设备连接并按“Tab to beam”,则只有到Android市场的URI到达. 但是,如果我打开浏览器,连接并选项卡,浏览器中的当前URL将会到达
我现在正在进行一个
android梁项目.我从
Android开发人员那里复制了一个测试类.
我的问题是发送正确的数据.如果我将(p2p)与另一台设备连接并按“Tab to beam”,则只有到Android市场的URI到达. 如何告诉android应该发送哪个视图或文本?我没弄明白.我只想发一个简单的字符串“你好!”例如 这是代码: package peer.to.peer; import java.nio.charset.Charset; import android.app.Activity; 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.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Peer2peerActivity extends Activity implements CreateNdefMessageCallback,OnNdefPushCompleteCallback { private Button sendButton; private EditText textfield; NfcAdapter mNfcAdapter; private static final int MESSAGE_SENT = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //initialisierung sendButton=(Button) findViewById(R.id.button); textfield= (EditText) findViewById(R.id.textfield); //mNfcAdapter = NfcAdapter.getDefaultAdapter(this); //if(mNfcAdapter==null) toast("NFC ist nicht vorhanden"); //else toast("NFC ist vorhandne"); toast("start"); sendButton.setOnClickListener(mTagWriter); } //lokaler OnClickListener für den Button private View.OnClickListener mTagWriter = new View.OnClickListener() { public void onClick(View arg0) { // Write to a tag for as long as the dialog is shown. //disableNdefExchangeMode(); //enableTagWriteMode(); toast(textfield.getText().toString()); } }; //notification-methode public void toast(String text){ Toast.makeText(this,text,Toast.LENGTH_SHORT).show(); } 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(); } public NdefMessage createNdefMessage(NfcEvent event) { String text = (textfield.toString()); NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_ABSOLUTE_URI,"http://www.google.de".getBytes(Charset.forName("US-ASCII")),new byte[0],new byte[0]); NdefMessage msg = new NdefMessage( new NdefRecord[] { uriRecord //createMimeRecord("text/plain",text.getBytes()) /** * The Android Application Record (AAR) is commented out. When a device * receives a push with an AAR in it,the application specified in the AAR * is guaranteed to run. The AAR overrides the tag dispatch system. * You can add it back in to guarantee that this * activity starts when receiving a beamed message. For now,this code * uses the tag dispatch system. */ //,NdefRecord.createApplicationRecord("com.example.android.beam") }); return msg; } /** * Creates a custom MIME type encapsulated in an NDEF record * * @param mimeType */ public NdefRecord createMimeRecord(String mimeType,byte[] payload) { byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII")); NdefRecord mimeRecord = new NdefRecord( NdefRecord.TNF_MIME_MEDIA,mimeBytes,payload); return mimeRecord; } /** 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; } } }; } 提前致谢 浆果 解决方法
您正在获取URI,因为第一条记录是指向google.de的URI记录.将uriRecord替换为对createMimeRecord()的调用,您应该获得将mime类型设置为text / plain的文本.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |