Envoyer un fichier en utilisant Bluetooth OBEX Object Push Profile (OPP)

y a-t-il un moyen d'envoyer un fichier via L'API Bluetooth d'android via OBEX?

j'ai besoin d'envoyer un fichier à une imprimante qui supporte OBEX OPP seulement.

je peux envoyer le fichier à l'aide de l'Android intent ACTION_SEND à l'imprimante sans problème, mais je dois l'envoyer par programmation..

je peux me connecter à l'imprimante bluetooth en utilisant OBEX OPP UUID (1105) avec la méthode createRfcommSocketToServiceRecord (), mais ensuite je dois suivre les spécifications obex pour envoyer un fichier en utilisant OBEX.. ce n'est pas aussi simple que d'écrire des octets sur la socket de sortie..

mais si L'intention ACTION_SEND peut gérer cela, pourquoi il n'y a pas d'api pour les développeurs pour envoyer les fichiers?

j'ai aussi vérifié quelques libs tiers comme BlueCove, mais je n'ai toujours pas le faire fonctionner.. (Nexus One et Galaxy Tab jettent une exception disant que la bibliothèque native bluecove_armv71 n'est pas disponible.. et LG Optimus One dit que bluecove_armv61 n'est pas disponible..)

je suis coincé, des idées?

SOLUTION DE TRAVAIL

pour quiconque essaie d'envoyer un fichier à un périphérique bluetooth sans succès, je fournis une solution de travail en utilisant des fournisseurs de contenu (merci à KPBird):

Saisir la classe java BluetoothShareici

que, le code suivant envoie un fichier sur la carte SD à un bluetooth périphérique:

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

certaines personnes éprouvent des problèmes avec la solution ci-dessus, elle a été testée sur les appareils suivants:

Fonctionne sur:

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

A questions sur:

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

si vous êtes en mesure de tester cet extrait sur des appareils qui ne sont pas listés ci-dessus, s'il vous plaît fournir les détails des périphériques (Marque, Nom, version android,etc..) avec lequel vous l'avez testé, et les résultats des tests, dans un commentaire ci-dessous, je vais mettre à jour la question, y compris vos données.

23
demandé sur BFil 2011-04-07 11:31:56

4 réponses

j'ai écrit un exemple d'application pour tester la réponse fournie. Malheureusement, il ne fonctionne pas pour moi, donc je pense que cette question n'est pas entièrement répondu.

4
répondu Diego 2011-08-17 10:19:44

je pense qu'il ya un soutien dans Android pour les OPP.Il y a un chemin dans android/packages/apps/Bluetooth/...../ opp/*.java

si votre version n'a pas cela, j'ai trouvé un lien utile qui aidera à utiliser OBEX OPP dans android. La modification du cadre Android est nécessaire ici.

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

3
répondu Ajay Soman 2012-10-22 16:05:47

il n'y a pas d'API publique pour accéder à OBEX. Sur pourquoi il n'y a pas D'API - Google sait mieux :)

2
répondu Dennis Mathews 2011-04-07 18:33:15

Quelqu'un a dit que cela fonctionne bien dans certains téléphones Samsung, mais pas dans d'autres téléphones Samsung. Puis J'ai utilisé "BluetoothShare" pour écrire un programme de test simple, et demander à mes amis de m'emprunter le téléphone pour tester...

  1. Il ne peut PAS travailler dans HTC Incredible
  2. Il peut travailler dans SonyEricsson Xperia arc S

par conséquent, je pense que certains téléphones ne sont pas compatibles avec ces codes BluetoothShare...

0
répondu Arthur Huang 2012-03-09 08:10:00