1

我有一个应用程序,其中一个特殊的 Activity A 能够传输数据:

当 Device1 在 Activity A 并且你和 Device2 配对时(无论 Device2 在哪里,即使应用程序没有启动),Beam touch 后数据传输成功。活动 A 有意图过滤器:

       <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="application/de.my.app" />
        </intent-filter>

on 做必要的推动。

但是当我在另一个活动 B 中时,这也使得

  1. 另一台设备启动应用程序
  2. 如果应用程序已启动,则在两台设备上都显示触摸模式。我现在不希望任何设备有改变来做光束。如果您在 Android 桌面上并配对设备,您也不会获得光束对话框。你只是得到一个小的振动。这就是我想要的。可能吗?

提前致谢!

4

1 回答 1

5

在 Activity B 中,您可以打开前台调度、忽略任何 NFC 意图并禁用发送 Android Beam 消息:

private NfcAdapter nfcAdapter;

protected void onCreate(Bundle savedInstanceState) {
  ...
  nfcAdapter = NfcAdapter.getDefaultAdapter(this);
  // turn off sending Android Beam
  nfcAdapter.setNdefPushMessage(null, this);
}

protected void onResume() {
  // catch all NFC intents
  Intent intent = new Intent(getApplicationContext(), getClass());
  intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
  PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
  nfcAdapter.enableForegroundDispatch(this, pintent, null, null);
}

protected void onPause() {
  nfcAdapter.disableForegroundDispatch(this);
}

protected void onNewIntent(Intent intent) {
  if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction()) {
    return; // ignore NFC intents
  }
}

Ndef您可以通过仅过滤中的技术PendingIntent和/或检查对象支持的onNewIntent()其他技术来使这一点更加具体。TagAndroid Beam 意图始终拥有该Ndef技术,而没有其他技术。

于 2012-05-11T20:28:59.587 回答