2012-05-10 2 views
1

У меня есть приложение, где специальный Activity A способен передавать данные:Отключить сенсорный луч режим

Когда DEVICE1 в активность А, и вы его сопряжение с устройство2 (независимо от того, где устройство2, даже если приложение является не начаты) данные успешно передаются после касания луча. Мероприятие А имеет намеренный фильтр:

 <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 и вы соединяете устройства, вы также не получаете диалоговое окно луча. Вы просто получаете небольшую вибрацию. Вот что я хочу здесь. Является ли это возможным?

Заранее благодарен!

ответ

5

В активность 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() какие другие технологии поддерживает объект Tag. Android Beam намерения всегда имеют технологию Ndef и никаких других.

+0

В подобной ситуации я заметил, что мой onNewIntent() вызывается с ACTION_NDEF_DISCOVERED. Если моя цель состоит в том, чтобы подавить (повтор) запуск принимающей активности, должен ли я также немедленно вернуться, когда intent.getAction() == ACTION_NDEF_DISCOVERED? Благодарю. – gcl1