Отправка файла с помощью Bluetooth OBEX Object Push Profile (OPP) - PullRequest
23 голосов
/ 07 апреля 2011

Можно ли как-нибудь отправить файл с помощью API Android Bluetooth через OBEX?

Мне нужно отправить файл на принтер, который поддерживает только OBEX OPP.

Я могу отправитьфайл с помощью Android-намерения ACTION_SEND на принтер без проблем, но мне нужно было бы отправить его программно.

Я могу подключиться к Bluetooth-принтеру, используя OBEX OPP UUID (1105) с методом createRfcommSocketToServiceRecord (), но тогда я должен следовать спецификациям obex для отправки файла с использованием OBEX .. это не так просто, как запись байтов в выходной сокет ..

Но если намерение ACTION_SEND может с этим справиться, почему нет 'Есть ли какие-либо API-интерфейсы для разработчиков, чтобы отправлять файлы?

Я также проверил некоторые сторонние библиотеки, такие как BlueCove, но я все еще не заставил его работать .. (Nexus One и Galaxy Tab выдают исключение, говоря, что nativeбиблиотека bluecove_armv71 недоступна ... а LG Optimus One говорит, что bluecove_armv61 недоступна ..)

я застрял, есть идеи?

РАБОЧЕЕ РЕШЕНИЕ

Для тех, кто безуспешно пытается отправить файл на устройство Bluetooth, я предоставляю работающее решение с использованием контент-провайдеров (благодаря KPBird):

Grab theкласс java BluetoothShare из здесь

Затем следующий код отправляет файл с SD-карты на устройство Bluetooth:

BluetoothDevice device;
String filePath = Environment.getExternalStorageDirectory().toString() + "/file.jpg";

ContentValues values = new ContentValues();
values.put(BluetoothShare.URI, Uri.fromFile(new File(filePath)).toString());
values.put(BluetoothShare.DESTINATION, device.getAddress());
values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND);
Long ts = System.currentTimeMillis();
values.put(BluetoothShare.TIMESTAMP, ts);
Uri contentUri = getContentResolver().insert(BluetoothShare.CONTENT_URI, values);

ОБНОВЛЕНИЕ

У некоторых людей возникают проблемы с решением, описанным выше, оно было протестировано на следующих устройствах:

Работает на:

  • LGOptimus One (Android 2.1)
  • HTC Desire (Android 2.2)
  • Google Nexus One (Android 2.2 и 2.3)
  • Samsung Galaxy S2 (Android 4.0.3)
  • HTC Amaze (Android 2.3.4)

Имеются проблемы с:

  • LG P500 (Android 2.3.3)
  • Galaxy TABP500 (Android 2.2)
  • Google Nexus S (Android 4.1.2)

Если вы можете протестировать этот фрагмент на устройствах, которые не указаны в спискеbove, пожалуйста, предоставьте информацию об устройствах (бренд, имя, версия для Android и т. д.), с которыми вы его тестировали, и результаты теста, в комментарии ниже, я обновлю вопрос, включая вашданные.

Ответы [ 4 ]

4 голосов
/ 17 августа 2011

Я написал пример приложения для проверки предоставленного ответа.К сожалению, это не работает для меня, поэтому я думаю, что этот вопрос не полностью ответил.

3 голосов
/ 22 октября 2012

я думаю, что в Android есть поддержка для OPP. В android / packages / apps / Bluetooth /...../ opp / *. Java

есть путь

Если в вашей версии этого нет, я нашел полезную ссылку, которая поможет использовать OBEX OPP в Android. Модификация платформы Android необходима здесь.

http://i -miss-erin.blogspot.in / 2009/10 / как-бы иметь-OBEX-функции-в-android.html

2 голосов
/ 07 апреля 2011

Нет открытых API для доступа к OBEX.О том, почему нет API - Google знает лучше:)

0 голосов
/ 09 марта 2012

Кто-то сказал, что он отлично работает в некоторых телефонах Samsung, но не работает в других телефонах Samsung. Затем я воспользовался «BluetoothShare», чтобы написать простую тестовую программу и попросить друзей одолжить мне телефон для тестирования ...

  1. Это не может работать в HTC Incredible
  2. Может работать в SonyEricsson Xperia arc S

Поэтому я думаю, что некоторые телефоны не совместимы с этими кодами BluetoothShare ...

...