Обнаружено приложение, запущенное Action Main (из AAR) вместо NDEF

Я пытаюсь запустить свое приложение, сканируя тег, но цель, которую я получаю, - это действие 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 размещается на втором месте, а фильтр намерений учитывает все типы пантомимы. спасибо за помощь


person Jinbonka    schedule 16.04.2013    source источник


Ответы (1)


Вы создаете запись типа URI при фильтрации записей типа MIME. Вместо этого фильтруйте записи типа URI. Кроме того, полезная нагрузка записи URI должна начинаться со схемы, такой как «http://» (иначе фильтр никогда не будет соответствовать).

person NFC guy    schedule 16.04.2013
comment
Тай, на самом деле я хотел запустить свою активность, чтобы открыть веб-страницу в браузере. Но это делается автоматически, если я вынимаю AAR. Кстати, строка: payload[0] = 0x01; добавляет http:// - person Jinbonka; 16.04.2013
comment
Я проглядел payload[0] = 0x01;; мой плохой, извините! - person NFC guy; 16.04.2013