#android #android-activity #tags #android-manifest #nfc
#Android #android-активность #Теги #android-манифест #nfc
Вопрос:
Я хочу читать в разных действиях любой ТЕГ, который не отображается на моем дисплее, какое действие лучше всего подходит для чтения этого тега? Я думаю, это должно быть автоматически. Мой кодовый манифест таков:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.iprocuratio.strim.LoginActivity"
android:label="@string/title_activity_login" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.iprocuratio.strim.TemperatureActivity"
android:label="@string/title_activity_temperature" >
</activity>
<activity
android:name="com.iprocuratio.strim.ConstantsActivity"
android:label="@string/title_activity_constants" >
</activity>
<activity
android:name="com.iprocuratio.strim.FC"
android:label="@string/title_activity_fc" >
</activity>
<activity
android:name="com.iprocuratio.strim.FR"
android:label="@string/title_activity_fr" >
</activity>
<activity
android:name="com.iprocuratio.strim.SatO2"
android:label="@string/title_activity_sat_o2" >
</activity>
<activity
android:name="com.iprocuratio.strim.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.iprocuratio.strim.PrescriptionsActivity"
android:label="@string/title_activity_prescriptions">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:name="com.iprocuratio.strim.MedicamentosActivity"
android:label="@string/title_activity_medicamentos" >
</activity>
<activity
android:name="com.iprocuratio.strim.Identificacion"
android:label="@string/title_activity_identificacion" >
<intent-filter >
<action android:name="com.google.zxing.client.android.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.iprocuratio.strim.Pantallaleer"
android:label="@string/title_activity_pantallaleer" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:name="com.iprocuratio.strim.IdentificacionFinal"
android:label="@string/title_activity_identificacion_final" >
</activity>
</application>
Я реализовал чтение ТЕГА в двух действиях:
ПредписаниеакТивность и Pantallaleer.
Например, когда я хочу прочитать ТЕГ в PrescriptionsActivity, всегда появляется следующее изображение:
Я бы хотел, чтобы, когда я читаю ТЕГ, он не показывал это окно и автоматически выбирал правильное действие. Кто-нибудь знает, как я могу сделать? Правильный ли мой код?
Дайте мне знать. Спасибо.
С уважением.
Ответ №1:
Оба действия чувствительны к одному и тому же намерению (т. Е. Оба запускаются для тегов, содержащих текстовую запись (или запись типа MIME типа text / plain):
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
Android не может определить, какое действие лучше соответствует потребностям конкретного тега, если оба содержат один и тот же тип данных и оба фильтра соответствуют одному и тому же типу данных. Следовательно, Android показывает средство выбора намерений, позволяющее пользователю выбирать.
Если вы хотите избежать выбора намерений, вам следует использовать разные типы данных для каждого действия (вместо использования очень неопределенного текстового / простого типа данных). Например, если должен запуститься тег PrescriptionsActivity
, вы должны написать в тег следующее сообщение NDEF:
-------------------------------------------------
| EXT:iprocuratio.com:prescriptions | <your data> |
-------------------------------------------------
Вы можете создать это сообщение NDEF на Android с помощью
NdefMessage msg = new NdefMessage(
NdefRecord.createExternal("iprocuratio.com", "prescriptions", yourData),
);
Затем фильтр намерений для PrescriptionsActivity
может выглядеть следующим образом:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/iprocuratio.com:prescriptions"/>
</intent-filter>
Аналогично, для этого Pantallaleer
действия вы могли бы использовать:
-------------------------------------------------
| EXT:iprocuratio.com:pantallaleer | <your data> |
-------------------------------------------------
Вы можете создать это сообщение NDEF на Android с помощью
NdefMessage msg = new NdefMessage(
NdefRecord.createExternal("iprocuratio.com", "pantallaleer", yourData),
);
Затем фильтр намерений для Pantallaleer
activity может выглядеть следующим образом:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/iprocuratio.com:pantallaleer"/>
</intent-filter>