我正在开发一个使用NFC与其他设备交互的Android应用程序。这种互动主要由两个步骤组成:
对于第一步,我已经将以下行添加到AndroidManifest.xml文件中。这样,当设备接收到类型为MainActivity
的URI时,将启动myprotocol:something
。
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myprotocol" />
</intent-filter>
对于第二步,我的MainActivity
类实现了CreateNdefMessageCallback
和OnNdefPushCompleteCallback
。代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
adapter.setNdefPushMessageCallback(this, this);
adapter.setOnNdefPushCompleteCallback(this, this);
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
NdefRecord uriRecord = NdefRecord.createUri("protocol:something");
NdefMessage message = new NdefMessage(new NdefRecord[] { uriRecord });
return message;
}
@Override
public void onNdefPushComplete(NfcEvent event) {
}
所以,现在问题
这两个部分可以独立工作,但当我将这两个部分都添加到应用程序时就不会了。
也就是说,如果我添加第一部分,当接收到NDEF消息时,应用程序将正确启动。此外,如果我只添加第二部分,如果我点击我的设备到其他设备运行应用程序,我看到触摸到波束接口,并发送NDEF消息。
问题是,如果我同时添加,当我点击到另一个设备时,应用程序就会启动,但是触摸到光束的界面永远不会显示出来。如果我分开设备并再次点击,MainActivity
就会重新启动,但我永远看不到发送消息的选项。
我如何才能达到所需的情景?
发布于 2013-10-09 06:52:33
在两个Android设备上使用Beam是不可能的(请注意,对于其他设备,特别是当一个是Android设备,一个是专用的NFC阅读器或一个设备,您可以在一个低级别上控制NFC功能,或者一个模仿NFC标记的设备)。
然而,在两台Android设备之间,只需对现有的场景进行很少的修改,就可以采用双击方式。您只需添加一个前台调度,它将拦截传入的NDEF消息,从而阻止Android重新启动您的活动:
@Override
public void onResume() {
super.onResume();
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
PendingIntent pi = PendingIntent.getActivity(
this,
0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),
0);
adapter.enableForegroundDispatch(this, pi, null, null);
}
编辑
对于双抽头场景,一个更普遍的方法是在第一个点击时将NDEF消息从设备A发送到设备B。此NDEF消息在设备B上启动应用程序。发送NDEF消息后,设备A立即停止发送消息。当设备B上的应用程序处于活动状态时,它会为Beam注册自己的NDEF消息。然后,在第二个点击中,Beam将显示在设备B上,单击Beam屏幕将向设备A发送响应NDEF消息。
注意,设备A必须停止发送其初始NDEF消息。否则,设备B上的应用程序将收到一条新的NDEF消息,因此不会打开Beam。
https://stackoverflow.com/questions/19266944
复制相似问题