Подтвердить что ты не робот

Отправка файла с помощью профиля OBEX объекта OBEX (OPP)

Есть ли способ отправить файл, используя API-интерфейс Android для Android, используя OBEX?

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

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

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

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

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

Я застрял, любые идеи?

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

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

Возьмите 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);

UPDATE

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

Работает на:

  • LG Optimus 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 TAB P500 (Android 2.2)
  • Google Nexus S (Android 4.1.2)

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

http://i-miss-erin.blogspot.in/2009/10/how-to-have-obex-function-in-android.html

Ответ 3

Нет публичных API-интерфейсов для доступа к OBEX. Почему нет API-интерфейсов - Google знает лучше:)

Ответ 4

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

  • Он не может работать в HTC Incredible
  • Он может работать в SonyEricsson Xperia arc S

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