2011-04-07 22 views
22

¿Hay alguna forma de enviar un archivo utilizando la API de Android con bluetooth usando OBEX?Envío de un archivo utilizando Bluetooth OBEX Object Push Profile (OPP)

Necesito enviar un archivo a una impresora que solo admita OBEX OPP.

puedo enviar el archivo con la intención ACTION_SEND androide a la impresora sin problemas, pero me gustaría que enviar mediante programación ..

puedo conectar a la impresora Bluetooth usando OBEX OPP UUID (1105) con el método createRfcommSocketToServiceRecord(), pero entonces debería seguir las especificaciones obex para enviar un archivo usando OBEX ... no es tan simple como escribir bytes en el socket de salida ...

Pero si la intención ACTION_SEND puede manejar esto, ¿Por qué no hay ninguna API para que los desarrolladores envíen los archivos?

También comprobé algunas librerías de terceros como Bluecove, pero todavía no lo hicieron conseguir que funcione .. (Nexus Galaxy Tab & una excepción diciendo que bluecove_armv71 biblioteca nativa no está disponible .. y LG Optimus Uno dice que bluecove_armv61 no está disponible ...)

Estoy atascado, ¿alguna idea?

solución de trabajo

Para cualquiera que trate de enviar un archivo a un dispositivo Bluetooth sin suerte, que proporciona una solución de trabajo utilizando los proveedores de contenidos (gracias a KPBird):

Coge la clase java BluetoothShare de here

Than, el código siguiente se envía un archivo en la tarjeta SD a un dispositivo 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); 

ACTUALIZACIÓN

Algunas personas están experimentando problemas con la solución anterior, se ha probado en los siguientes dispositivos:

Obras en:

  • LG Optimus One (Android 2.1)
  • HTC Desire (Android 2.2)
  • Google Nexus One (Android 2.2 y 2.3)
  • Samsung Galaxy S2 (Android 4.0.3)
  • HTC Amaze (Android 2.3.4)

tiene problemas en:

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

Si usted es capaz de probar este fragmento en dispositivos que no están en la lista, por favor proporcionan los detalles de los dispositivos (marca, nombre, versión androide, etc ..) con el que se puso a prueba , y los resultados de las pruebas, en un comentario a continuación, actualizaré la pregunta, incluidos sus datos.

+5

Hola ShadowCloud, En el código anterior, una vez que el contentUri está poblado, donde sucede el dispositivo Bluetooth Push ?? No veo ningún código para eso ... –

+1

Este código no funciona en OS de 4.1 en adelante – Harish

Respuesta

2

No hay API públicas para acceder a OBEX. Por qué no hay API - Google sabe mejor :)

+0

¿Alguna pista sobre cómo funcionan las aplicaciones Bluetooth File Transfer y Androbex? usan OBEX OPP/FTP, pero tal vez funcionan solo porque ambos dispositivos (emisor y receptor) tienen instalada la aplicación ... (eso es factible, pero para dispositivos como impresoras, no lo sé, funciona) – BFil

+1

¿Puedes usar esto? aplicación y enviar una vcard a la impresora? Funciona ? De la descripción de la aplicación, parece que es una implementación de OBEX sobre sockets RFCOMM/SPP. Hay otras aplicaciones que necesitan la misma aplicación en ambos lados para enviar/recibir: es muy probable que usen conectores SPP. –

+1

Sí, creo que funciona de esa manera, la misma aplicación en ambos dispositivos y una comunicación de socket estándar. Porque con las API públicas puedo conectarme a la impresora usando el protocolo OBEX, pero luego puedo simplemente escribir y leer desde las transmisiones io, lo mismo que comunicarme a través de SPP ... Así que la única solución para enviar el archivo a la impresora es use el intento ACTION_SEND estándar, qué vergüenza ... – BFil

3

He escrito un sample application para probar la respuesta proporcionada. Lamentablemente, no funciona para mí, así que creo que esta pregunta no está completamente respondida.

+0

le gustó su enfoque lo probaré con los cambios y le notificaré sobre la solución si la encuentro. – IamStalker

+0

@ Diego, yo también probé tu fragmento del enlace de arriba. No funciona. ¿Me puede dar una solución para esto? –

0

Alguien dijo que funciona bien en algunos teléfonos Samsung, pero no funciona en otros teléfonos Samsung. Luego utiliza "BluetoothShare" para escribir un programa de prueba simple, y pedir a mis amigos para que me prestado el teléfono para probar ...

  1. no puede trabajar en HTC Incredible
  2. Se puede trabajar en SonyEricsson Xperia arc S

por lo tanto, creo que algunos teléfonos no son compatibles con estos códigos BluetoothShare ...

Cuestiones relacionadas