2012-05-10 8 views
1

無効にビームタッチ:私は特別なアクティビティAがデータを転送することができるアプリを持っているモード

デバイス1は、アクティビティAにあり、あなたはアプリがある場合でも、デバイス2(デバイス2があるどんなに、とペアリング開始されていない)、ビームタッチ後にデータが正常にトランスファーされます。アクティビティ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> 

オンは必要なプッシュを行います。

しかし、私は別のアクティビティのBにいるとき、これはまた

  1. 他のデバイスは、アプリが起動している場合タッチモードは、両方のデバイス上で表示させるアプリ
  2. を開始します。どんなデバイスにもビームを変更する必要はありません。あなたがアンドロイドデスクトップにいて、デバイスをペアリングしている場合は、ビームダイアログも表示されません。あなたはちょうど小さな振動を得る。それは私がここで欲しいものです。出来ますか?

ありがとうございます!活動Bでは

答えて

5

、あなたは、フォアグラウンド・ディスパッチをオンにする任意のNFCインテントを無視して、Androidのビームメッセージの送信を無効にすることができます

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()に、他のどの技術がオブジェクトをサポートしているかをチェックしてください。 Android Beamの意図は常にNdefの技術を持ち、他のものはありません。

+0

同様の状況で、私はonNewIntent()がACTION_NDEF_DISCOVEREDで呼び出されることに気付きました。私の目標が受信活動の(再)立ち上げを抑止することであるならば、intent.getAction()== ACTION_NDEF_DISCOVERED?ありがとう。 – gcl1