无法在前台模式下读取nfc标签

时间:2011-11-03 20:02:11

标签: android tags nfc foreground dispatch

我需要在手机阅读标签时选择我的活动。我的应用程序应该在活动选择器上可见。

在我的活动的清单文件中,我有

        <activity android:name=".WaitingPayment" android:noHistory="true"
        android:theme="@android:style/Theme.NoTitleBar"
        android:screenOrientation="portrait" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <data android:mimeType="*/*" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

在活动课中我有:

nfcAdapter = NfcAdapter.getDefaultAdapter(this);

    pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    try {
        ndef.addDataType("*/*");    /* Handles all MIME based dispatches. 
                                       You should specify only the ones that you need. */
    }
    catch (MalformedMimeTypeException e) {
        throw new RuntimeException("fail", e);
    }
    this.intentFiltersArray = new IntentFilter[] {ndef};
    this.techListsArray = new String[][] { new String[] { MifareUltralight.class.getName(), Ndef.class.getName(), NfcA.class.getName()}};

我可以做些什么来查看活动选择器上的标签并处理它?我的标签是URI

感谢

3 个答案:

答案 0 :(得分:0)

您可以尝试使用此URI:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http"
        android:host="developer.android.com"
        android:pathPrefix="/index.html" />
</intent-filter>

这是检测URI类型Ndef的合适方法。您的代码正在寻找MIME类型。最值得关注的是你拥有的NDE类型记录。

您可以使用此链接获取有关此方面的更多信息:http://developer.android.com/guide/topics/nfc/nfc.html

答案 1 :(得分:0)

您的代码正在使用前台调度,这是不必要的。只需使用intent过滤器。如果您的应用程序是唯一一个过滤该URI的应用程序,它将自动启动。如果有多个应用程序可以处理URI,则您的应用程序将显示在活动启动器中。您不需要第二个代码段,只需要Ben答案中的代码段,然后根据您的URI修改它。

答案 2 :(得分:0)

仅当有多个应用程序具有相同的意图过滤器时,才会显示“活动选择器”。如果您已将Uri写入您的标记,则应使用

<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"
     android:host="developer.android.com"
     android:pathPrefix="/index.html" />
</intent-filter>