Как получить данные тега NFC, если моя активность не отображается

Я разрабатываю приложение NFC для включения Wi-Fi и подключения к определенной сети при нажатии тега NFC. До сих пор я понимал, что активность NFC должна быть на переднем плане, чтобы получать данные NFC из системы Android. Но я сомневаюсь, верно ли мое понимание или нет, так как я видел работу NFC Tasks(https://play.google.com/store/apps/details?id=com.wakdev.nfctasks). Хотя приложение не активируется при получении данных NFC, оно запускает соответствующую задачу и успешно включает WiFi.

Я хотел бы знать, как это возможно. Есть ли кто-нибудь, кто может объяснить его работу?

Заранее спасибо.

Logcat при касании тега NFC, созданного «Инструментами NFC»: I/NfcDispatcher(822): сопоставил AAR с NDEF: E/SoundPool(822): не воспроизводить звуковой пул в НЕ нормальном режиме: E/NfcService(822): applyAlternativeHandler: : Получено неизвестное сообщение: I/ActivityManager(553): START {act=android.nfc.action.NDEF_DISCOVERED type=w1/33 pkg=com.wakdev.nfctasks cmp=com.wakdev.nfctasks/.NFCActivity (есть дополнения) u =0} от pid 822

Logcat при касании тега NFT, созданного моим приложением: I/NfcDispatcher(822): сопоставил AAR с запуском приложения: E/SoundPool(822): не воспроизводить звуковой пул в НЕ нормальном режиме: E/NfcService(822): applyAlternativeHandler:: Получено неизвестное сообщение: I/ActivityManager(553): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.Farraf.DigitalSignage cmp=com.Farraf.DigitalSignage /.main.DigitalSignageActivity u=0} из pid 822: I/ActivityManager(553): Запустить процедуру com.Farraf.DigitalSignage для активности com.Farraf.DigitalSignage/.main.DigitalSignageActivity: pid=10160 uid=10008 gids={3003 , 1015, 1028}


person Raphael Joh    schedule 14.11.2014    source источник


Ответы (1)


Помимо получения событий тегов NFC через систему отправки переднего плана (см. Foreground Dispatch System), вы можете зарегистрировать свои действия для запуска и получения событий NFC через AndroidManifest.xml вашего приложения (см. Фильтрация намерений NFC). Например. если ваш тег NFC содержит URI http://www.example.com/, вы можете создать фильтр намерений нравится:

<activity ...>
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="http"
              android:host="www.example.com" />
    </intent-filter>
</activity>
person Michael Roland    schedule 14.11.2014
comment
Проблема в том, что при нажатии тега NFC, написанного моим приложением, намерение.действие является ГЛАВНЫМ, а не NDEF_DISCOVERED. Как вы думаете, может ли настройка фильтра намерений решить мою проблему? - person Raphael Joh; 14.11.2014
comment
@RaphaelJoh Кажется, это другая проблема, чем та, которую вы описали в своем вопросе выше: тег (в частности, с AAR) вызовет срабатывание MAIN действия намерения только в том случае, если вы не зарегистрировались должным образом для намерения NDEF. См. этот ответ и этот ответ для более подробного объяснения. - person Michael Roland; 14.11.2014
comment
Данные, которые должны быть установлены для тега NFC, выглядят следующим образом: .... запись 0: текст ‹ssid›/‹пароль›/‹идентификатор клиента›/‹номер таблицы›/‹номер телефона› запись 1: внешняя ‹имя пакета› для вызова мое приложение с текстовыми данными. Приведенный ниже фильтр намерений добавлен в AndroidManifest.xml ‹intent-filter› ‹action android:name=android.nfc.action.NDEF_DISCOVERED/› ‹category android:name=android.intent.category.DEFAULT/ › ‹data android:mimeType=text/plain/› ‹/intent-filter› Теперь я могу получать информацию о WiFi одновременно с моим приложением, запущенным с помощью тега NFC. - person Raphael Joh; 17.11.2014
comment
@RaphaelJoh Правильно, если ваша первая запись является текстовой записью (или записью типа text/plain MIME), вам нужно будет адаптировать фильтр намерений, чтобы он соответствовал типу text/plain MIME (вместо URI, который я показал выше) . Обратите внимание, что структура данных, которую вы показали в своем комментарии, не похожа на читаемый человеком текст и поэтому лучше подходит для пользовательского типа записи, например. внешний тип форума NFC. - person Michael Roland; 22.11.2014