2

Я пытаюсь передать провайдеру контента uri с помощью setBeamPushUrisCallback из галактики nexus (работает 4.2.1) в nexus7 (работает 4.2). Оба устройства установлено приложение, но передача не удается во время передачи NFC для Bluetooth, исключение я получаю:Android Beam ContentProvider Uri не работает

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 

Я объявил поставщик в своем манифесте (я мог бы запросить Ури просто отлично в моем приложение) и добавил фильтр намерений для активности, которая будет запущена, когда луч будет успешным. Что я делаю не так? и почему передача выполняется для Bluetooth всегда, а не Wi-Fi?

Update:

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

Активность реализует 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> 
+0

Не могли бы вы показать некоторые из соответствующих кодов формы вашего приложения? (Android Beam всегда использует Bluetooth, на данный момент он не поддерживает WiFi. Это в отличие от Samsung S-Beam, который всегда использует WiFi Direct, но работает только на последних устройствах с поддержкой NFC от Samsung.) –

+0

Спасибо за разъяснение !! Я обновил свой вопрос с помощью кода. –

ответ

0

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