NFC在不同的活动中自动读取TAGS,无需询问TAGS的过程

时间:2014-06-23 11:01:19

标签: android android-activity tags android-manifest nfc

我想在不同的活动中阅读任何TAG而不会出现在我的显示器中,哪个Activity最适合阅读此标签?我认为这应该是自动的。 我的代码清单是:

<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>

我已经在两个活动中实现了读取TAG: PrescriptionsActivity和Pantallaleer。 例如,当我想在PrescriptionsActivity中读取TAG时,总会出现下一个图像: enter image description here

我希望当我阅读TAG时,它不显示此窗口,它会自动选择正确的活动。 谁知道,我该怎么办? 我的代码是否正确?

让我知道。感谢。

问候。

1 个答案:

答案 0 :(得分:1)

两个活动对同一个意图都是敏感的(即两个触发包含文本记录的标记(或类型为text / plain的MIME类型记录):

 <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> |
+-------------------------------------------------+

您可以使用

在Android上创建此NDEF消息
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> |
+-------------------------------------------------+

您可以使用

在Android上创建此NDEF消息
NdefMessage msg = new NdefMessage(
    NdefRecord.createExternal("iprocuratio.com", "pantallaleer", yourData),
);

Pantallaleer活动的意图过滤器可能如下所示:

<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>