Android NFC-тег получен с вещательным приемником - PullRequest
7 голосов
/ 31 января 2011

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

и я получаю только это и никакой печати вообще ...

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?

Ответы [ 2 ]

9 голосов
/ 16 марта 2011

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

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

8 голосов
/ 25 апреля 2011

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

...