0

我试图通过扫描标签来启动我的应用程序,但我得到的意图是操作 Main 而不是我想要的 NDEF Discovered。

这是我用来编写 NdefMessage 的代码:

NdefRecord aar = NdefRecord.createApplicationRecord("com.example.mynfc");
NdefRecord record = createUriRecord("www.stackoverflow.com");
NdefMessage message = new NdefMessage(new NdefRecord[]{record, aar});

使用 createUriRecord :

private NdefRecord createUriRecord(String text){
    String uniqueId = text.substring(4);      
    byte[] uriField = uniqueId.getBytes(Charset.forName("US-ASCII"));  
    byte[] payload = new byte[uriField.length+1];                                                                       //add 1 for the URI Prefix  
    payload[0] = 0x01;                                                                                                  //prefixes http://www. to the URI  
    System.arraycopy(uriField, 0, payload, 1, uriField.length);                                                         //appends URI to payload  
    NdefRecord uriRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
    return uriRecord;
}

这是带有意图过滤器的清单的一部分:

   <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppBaseTheme" >
    <activity
        android:name="com.example.mynfc.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="*/*" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.nfc.action.TECH_DISCOVERED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <meta-data
            android:name="android.nfc.action.TECH_DISCOVERED"
            android:resource="@xml/techs" />

        <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我究竟做错了什么 ?aar 记录排在第二位,intent 过滤器考虑了所有的 mime 类型。谢谢帮助

4

1 回答 1

1

您在筛选 MIME 类型记录时正在创建 URI 类型记录。改为过滤 URI 类型的记录。除此之外,URI 记录负载应该以方案开头,例如“http://”(否则过滤器将永远不会匹配)。

于 2013-04-16T12:54:58.593 回答