Ошибка Uri Android Beam ContentProvider

Я пытаюсь передать uri поставщика контента, используя setBeamPushUrisCallback, из galaxy nexus (работает 4.2.1) в nexus7 (работает 4.2). На обоих устройствах установлено приложение, но передача не выполняется во время передачи NFC на Bluetooth, исключение, которое я получаю, это:

02-10 13:33:32.762: D/BluetoothOppUtility(23916): closeSendFileInfo:  uri=content://com.android.beam.Beam/msgs/2
02-10 13:33:32.762: W/dalvikvm(23916): threadid=21: thread exiting with uncaught exception (group=0x40d70930)
02-10 13:33:32.770: E/AndroidRuntime(23916): FATAL EXCEPTION: Bluetooth Share Service
02-10 13:33:32.770: E/AndroidRuntime(23916): java.lang.NullPointerException
02-10 13:33:32.770: E/AndroidRuntime(23916):    at com.android.bluetooth.opp.BluetoothOppUtility.closeSendFileInfo(BluetoothOppUtility.java:327)
02-10 13:33:32.770: E/AndroidRuntime(23916):    at com.android.bluetooth.opp.BluetoothOppService.insertShare(BluetoothOppService.java:614)
02-10 13:33:32.770: E/AndroidRuntime(23916):    at com.android.bluetooth.opp.BluetoothOppService.access$1800(BluetoothOppService.java:69)
02-10 13:33:32.770: E/AndroidRuntime(23916):    at com.android.bluetooth.opp.BluetoothOppService$UpdateThread.run(BluetoothOppService.java:472)
02-10 13:33:32.941: E/NfcHandover(693): Handover transfer failed

Я объявил поставщика в своем манифесте (я мог запросить uri в своем приложении) и добавил фильтр намерений для запуска активности при успешном выполнении луча. Что я делаю неправильно? и почему хэндовер всегда делается на блютуз а не на вайфай?

Обновлять:

Вот соответствующий фрагмент кода из приложения:

Активность реализует CreateBeamUrisCallback и в onCreate:

 mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
 if (mNfcAdapter == null) return;  // NFC not available on this device
 mNfcAdapter.setBeamPushUrisCallback(this, this);

и переопределенный метод:

@Override
public Uri[] createBeamUris(NfcEvent event) {
    Uri uri = Uri.parse("content://com.android.beam.Beam/msgs/2");
    return new Uri[]{uri};
}

Манифест:

 <provider
    android:name="com.example.android.beam.BeamContentProvider"
    android:authorities="com.android.beam.Beam"
    android:exported="true"/>
 <activity android:name="com.example.android.beam.Beam"
            android:label="@string/app_name"
            android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
         <intent-filter>
             <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.EDIT" />
            <action android:name="android.intent.action.PICK" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.item/vnd.com.example.msgs" />
        </intent-filter>
    </activity>

person kirthika selvaraj    schedule 10.02.2013    source источник
comment
Не могли бы вы показать часть соответствующего кода из вашего приложения? (Android Beam всегда использует Bluetooth, в настоящее время он не поддерживает WiFi. В отличие от Samsung S-Beam, который всегда использует WiFi Direct, но работает только на последних устройствах Samsung с поддержкой NFC.)   -  person NFC guy    schedule 11.02.2013
comment
Спасибо за ваше разъяснение!! Я обновил свой вопрос фрагментом кода.   -  person kirthika selvaraj    schedule 11.02.2013


Ответы (1)


Я обнаружил проблему, мне пришлось переопределить openFile(Uri uri, String mode) в моем контент-провайдере, где я должен был запросить базу данных, получить значения из курсора, записать их в файл и вернуть ParcelFileDescriptor для файла.

person kirthika selvaraj    schedule 11.02.2013