Enviar um arquivo usando o Bluetooth OBEX Object Push Profile (OPP)
Existe alguma maneira de enviar um arquivo usando a API do bluetooth android usando OBEX?
Preciso enviar um arquivo para uma impressora compatível apenas com OBEX OPP.
Posso enviar o arquivo usando a intenção Android ACTION_SEND para a impressora sem problemas, mas preciso enviá-lo programaticamente ..
Eu posso conectar-me à impressora bluetooth usando OBEX OPP UUID (1105) com o método createRfcommSocketToServiceRecord (), mas devo seguir as especificações obex para enviar um arquivo usando OBEX .. não é tão simples quanto escrever bytes no soquete de saída ..
Mas se a intenção ACTION_SEND puder lidar com isso, por que não existe uma API para os desenvolvedores enviarem os arquivos?
Também verifiquei algumas bibliotecas de terceiros como o BlueCove, mas ainda não funcionei .. (o Nexus One e o Galaxy Tab lançam uma exceção dizendo que a biblioteca nativa bluecove_armv71 não está disponível .. e o LG Optimus One diz que bluecove_armv61 não está disponível ..)
Estou preso, alguma idéia?
OLUÇÃO DE TRABALHO
Para quem tentar enviar um arquivo para um dispositivo bluetooth sem sorte, forneço uma solução funcional usando provedores de conteúdo (graças ao KPBird):
Grab a classe java BluetoothShare a partir deAqu
Than, o código a seguir envia um arquivo no cartão SD para um 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);
ATUALIZA
Algumas pessoas estão tendo problemas com a solução acima, ela foi testada nos seguintes dispositivos:
Trabalha em:
G Optimus One (Android 2.HTC Desire (Android 2.2)Google Nexus One (Android 2.2 e 2.3)Samsung Galaxy S2 (Android 4.0.3)HTC Amaze (Android 2.3.4)Tem problemas em:
LG P500 (Android 2.3.3)Galaxy TAB P500 (Android 2.2)Google Nexus S (Android 4.1.2)Se você puder testar esse snippet em dispositivos que não estão listados acima,fornecer os detalhes dos dispositivos (marca, nome, versão do Android, etc.) com a qual você o testou e os resultados do teste, em um comentário abaixo, atualizarei a pergunta, incluindo seus dados.