2011-01-31 5 views
7

Я пытаюсь поймать тег NFC в широковещательном приемнике, поэтому я написал простой БР, который печатает «asd» в onReceive(). В манифеста XML это мы проделали так:Android-тег NFC, полученный с помощью broadcastreceiver

и я получаю только это и не печатать на всех ....

01-31 16:37:18.980: ERROR/MediaPlayer(990): setAudioStream called in state 8 
01-31 16:37:18.980: ERROR/MediaPlayer(990): error (-38, 0) 
01-31 16:37:18.980: ERROR/MediaPlayer(990): start called in state 0 
01-31 16:37:18.980: ERROR/MediaPlayer(990): error (-38, 0) 
01-31 16:37:18.988: ERROR/MediaPlayer(990): Error (-38,0) 

Когда я использую деятельность в выполните следующие действия:

<activity android:name="TagViewer" 
      android:theme="@android:style/Theme.NoTitleBar"> 
      <intent-filter> 
       <action android:name="android.nfc.action.TAG_DISCOVERED"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
</activity> 

Активность начинается и работает отлично, так как я могу заставить ее работать с BroadcastReceiver?

+0

Извините, что комментарий dint принял код manifest.xml. Я не знаю, почему это ничем не странно, я просто использую: action android: name = "android.nfc.action.TAG_DISCOVERED" и категорию android: name = "android.intent.category.DEFAULT" Итак, я думаю, что намерение NFC просто не хочет запускать приемник, и оно работает только с действиями, почему? –

+0

Должно быть хорошо сейчас :) – xil3

+0

Можете ли вы опубликовать свой код приемника вещания? – xil3

ответ

9

Вы не можете. Как вы указали, адаптер NFC использует что-то очень похожее на startActivity(), чтобы отправить намерение с информацией о тегах в нем. Это не точно, как то, что мы можем сделать в Android SDK, так как теги NFC являются особенными. Например, вы не можете эмулировать startActivity() самостоятельно ни для чего, кроме TAG_DISCOVERED, что является последним действием и не очень полезно.

Я думаю, что причина этого связана с особой обработкой намерений NFC. Когда тег обнаружен оборудованием NFC, он ищет информацию о том, что будет обрабатывать тег. Первую попытку переднего плана. Затем он пытается выполнить NDEF_DISCOVERED-намерение, если это возможно, и ищет активность для его принятия. Если он не может найти его, он пытается установить намерение с помощью TECH_DISCOVERED. Опять же, если никакая активность не найдена, она, наконец, пытается TAG_DISCOVERED. Если он использовал широковещательную рассылку, как он мог бы сделать эту заднюю логику, чтобы попытаться найти что-то для обработки тега? Как бы он знал, действует ли что-то на намерении тега? И как он мог гарантировать, что только одна вещь будет действовать на тег?

8

Вы можете написать небольшое действие, которое вообще не отображает какой-либо пользовательский интерфейс, отправляет широковещательное сообщение, а затем заканчивается финишем(). Используя флаги в манифесте, вы можете избежать его появления в истории или в откликах и быть неуязвимым невидимым, мы надеемся получить аналогичный эффект, который вы желаете с помощью приемника braodcast.

+0

Еще нужно добавить оба манифеста, хотя ... (Это то, что я пытаюсь избегать) – TacB0sS

Смежные вопросы