为某些片段禁用 Android 光束

Disable Android beam for certain fragments

我需要禁用光束并在某些片段上启用。所以我有基本片段、供应商片段和产品片段。在基本片段 onResume 中,我调用:

NfcAdapter adapter = NfcAdapter.getDecaultAdapter(getActivity());
adapter.setNdefPushMessage(null, getActivity());

所以此时,当我将两个 NFC 设备放在一起时,它会播放声音,但不涉及 UI。这就是我想要的。

然后用户转到产品,订购产品并在 ordersummary 片段上查看 stem。在这里,我创建了我的 NDEF 消息并将其传递到我的 NDEF 推送消息回调中:

mNfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {
        @Override
        public NdefMessage createNdefMessage(NfcEvent event) {
            NdefMessage message = new NdefMessage((new NdefRecord[]{createMime("application/com.me.myactivity.fragments", mToBeam.getBytes()) }));

            return message;
        }
    }, mActivity);

mNfcAdapter.setOnNdefPushCompleteCallback(new NfcAdapter.OnNdefPushCompleteCallback() {
        @Override
        public void onNdefPushComplete(NfcEvent event) {

        }
    }, mActivity);

然而,在成功传输后,我会将用户带回产品页面,在 onResume() 我调用:

mNfcAdapter.setNdefPushMessage(null, getActivity());

然而,这被称为,现在当我将两个设备放在一起时,即使消息为空,我也会得到 UI。

您正在混合使用两种不同的方法:静态方法和基于回调的方法。为了禁用基于回调的方法,您必须调用 setNdefPushMessageCallback 传递 null 作为回调:

adapter.setNdefPushMessage(null, getActivity());
adapter.setNdefPushMessageCallback(null, getActivity());
adapter.setOnNdefPushCompleteCallback(null, getActivity());