Определить, была ли активность запущена нормально или после чтения тега NFC (без запроса)

Если используется Android Application Record (AAR), действие намерения

android.intent.action.MAIN

Так что я не могу знать, это нормальный запуск или запуск nfc.

Мне нужно делать немного разные вещи в моей деятельности, независимо от того, запускается ли активность нормально или после чтения тега nfc. Я также не хочу показывать подсказку для выбора приложения, если на телефоне есть другое приложение с таким же фильтром намерений, например:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain" />
</intent-filter>

person DixieFlatline    schedule 11.07.2012    source источник


Ответы (2)


[Редактировать]:

Проверьте полезную нагрузку в своем намерении: EXTRA_TAG или EXTRA_NDEF_MESSAGES

Это дополнение всегда будет установлено, если намерение исходит от события NFC.


[устаревший]:

Используйте getIntent() и проверьте его действие

person chrulri    schedule 11.07.2012
comment
Я проверил намерение, и если я использую AAR, действие будет android.intent.action.MAIN, поэтому я могу отличить его от обычного запуска. Как я могу обнаружить запуск nfc из AAR или с помощью любой другой процедуры? - person DixieFlatline; 14.07.2012
comment
Это хороший трюк, но если на моем телефоне есть 2 приложения с намерением, как в моем вопросе, мне все равно нужно выбрать (показана подсказка), какое приложение должно передать это намерение. - person DixieFlatline; 14.07.2012
comment
Что касается второй части вашего вопроса, прочитайте документацию: разработчик. android.com/guide/topics/connectivity/nfc/ Убедитесь, что вы добавили только одну запись AAR в NdefMessage, используя NdefRecord.createApplicationRecord(..) - person chrulri; 14.07.2012
comment
Я добавил только 1 AAR, но тогда действие android.intent.action.MAIN. Может быть, я не получил ваш ответ, не могли бы вы рассказать немного больше. - person DixieFlatline; 14.07.2012
comment
Во-первых, чтобы запустить только ваше приложение, NdefMessage должен иметь 1 (один) AAR, чтобы он знал, какое приложение запускать. В противном случае вы получите показанную подсказку. Во-вторых, чтобы отличить обычный запуск от запуска NFC, проверьте, существует ли EXTRA_TAG (например, null или нет) в намерении, которое вы получаете от getIntent(). В противном случае, я думаю, я неправильно понял ваш вопрос. - person chrulri; 14.07.2012
comment
Хорошо, теперь я понял (приму ваш ответ). Еще кое-что. Можно ли добавить какие-либо данные в AAR? - person DixieFlatline; 14.07.2012
comment
Не в AAR напрямую, так как createApplicationRecord(. .) принимает только один аргумент (packageName), но вы можете добавить несколько NdefRecord к NdefMessage - person chrulri; 15.07.2012
comment
Хорошо, спасибо, я создам текстовую запись NDEF (дополнительные данные для моего приложения) и запись AAR (только для запуска моего приложения без запроса). - person DixieFlatline; 15.07.2012
comment
Когда AAR является первой (или единственной) записью NDEF, в приложение всегда будет отправлено намерение ACTION_MAIN без каких-либо TAG или NDEF_MESSAGES EXTRA. Таким образом, неверно, что эти EXTRA всегда будут установлены, если намерение исходит из события NFC. - person NFC guy; 17.07.2012

Если вы поместите AAR not в качестве первой записи сообщения NDEF (то есть 2-й записи или позже) и поместите фильтр намерений NDEF_DISCOVERED в манифест для первой записи сообщения NDEF, ваше приложение будет получить намерение NDEF_DISCOVERED при запуске из тега. У намерения будут EXTRA, содержащие дескриптор тега и полное сообщение NDEF.

Если AAR является первой записью, в приложение будет отправлено намерение ACTION_MAIN. Это намерение не будет содержать никаких тегов или сообщений NDEF в EXTRA.

Чтобы ваше приложение не отображалось при сканировании других тегов NFC, убедитесь, что первая запись NDEF имеет тип, уникальный для вашего приложения, и отфильтруйте его. Для этой цели был специально разработан Внешний тип. (Из-за AAR в вашем теге никакие другие приложения не будут отображаться при его сканировании.)

person NFC guy    schedule 17.07.2012