1

特別なアクティビティAがデータを転送できるアプリがあります。

Device1がアクティビティAにあり、Device2とペアリングすると(Device2がどこにあっても、アプリが起動していなくても)、ビームタッチ後にデータが正常に転送されます。アクティビティ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

アクティビティBでは、フォアグラウンドディスパッチをオンにし、NFCインテントを無視し、AndroidBeamメッセージの送信を無効にすることができます。

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をチェックインしたりすることで、これをもう少し具体的にすることができます。Android Beamインテントには常にテクノロジーがあり、他のテクノロジーはありません。onNewIntent()TagNdef

于 2012-05-11T20:28:59.587 に答える