我实现了一个应用程序,提供基于 Android Beaming 的两个设备之间的交互。
在我当前的实现中,发送功能是不可用的。当两台设备相互接触并且其中一台准备发射时,会出现一个显示“touch to beam”(或类似的东西,我将设备设置为意大利语)的屏幕(在它们上,这很奇怪) . 当我 99.9% 的时间点击“触摸发送”时,Android 要求我将设备移近一些,但它们实际上是相互接触的(手机背面相互接触)。
这两款设备是 Nexus 9(最新的 Android 5)和 LG G2(Android 4.4)。从 LG G2 到 Nexus 的通信不那么烦人,假设它的“失败”率约为 80%。
这是我用于在 Activity 内部发送的裸代码:
...
nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
if(DEBUG) Log.d(TAG, "push message callback - message created");
return createApprovalRequestNDEFmsg();
}
}, this);
nfcAdapter.setOnNdefPushCompleteCallback(new NfcAdapter.OnNdefPushCompleteCallback() {
@Override
public void onNdefPushComplete(NfcEvent event) {
if(DEBUG) Log.d(TAG, "push complete");
waitForClientMessage();
}
...
protected void waitForClientMessage() {
Log.d(TAG, "Waiting for the reply message from the client.");
nfcAdapter.setNdefPushMessageCallback(null, this);
nfcAdapter.enableForegroundDispatch(this, nfcPendingIntent, readTagFilters, null);
}
}, this);
NDEF 消息的大小约为 100 字节。在该waitForClientMessage
方法中,Activity(在 Nexus 上运行)设置一个PendingIntent
用于从客户端(在 LG G2 上运行)接收 NFC 推送消息。
在发送成功的 0.1% 情况下,接收电话上的正确活动是由操作系统创建的。正如我所说,返回消息(来自 LG G2 -> Nexus)通常更容易接收。
您对这款 Android Beaming 有何体验?您是否必须实现一些特殊的东西才能在两个设备之间进行模糊可用的交互?
可能是我需要添加更多信息,但我不知道是哪一个,因为一切在概念上都很简单,而且 API 非常有限。