2011-03-08 6 views
1

J'essaie d'imprimer sur une imprimante HP DeskJet 450wbt à partir de mon téléphone T-Mobile Pulse Mini, en utilisant l'API Android Bluetooth. Le code est comme indiqué ci-dessous. La connexion échoue avec "Échec de la découverte du service". Si j'essaie la méthode alternative de création d'une socket mentionnée dans un certain nombre d'autres threads, j'obtiens "Host is down" à la place.Impression Bluetooth sur Android

Je pense que l'UUID pour BPP est correct, mais je ne suis pas sûr. L'imprimante est un appareil couplé et elle est allumée. Je ne trouve pas de pilote USB pour mon téléphone (un Huawei 8110 badgé), donc je n'ai pas pu déboguer sur l'appareil, ou regarder un journal. Je suis coincé à ce stade, et je serais reconnaissant pour tout conseil.

Voici un résumé de mon code:

final String UUID_BPP = "00001122-0000-1000-8000-00805F9B34FB"; 
final String printerName = "dj450 S/N SG..."; // name of paired printer 

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

if (bluetoothAdapter == null) { 
    return 2; // phone does not support Bluetooth 
} 

if (!bluetoothAdapter.isEnabled()) { 
    return 3; // Bluetooth has not been enabled 
} 

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); 

// Loop through paired devices 
BluetoothDevice printer = null; 

for (BluetoothDevice device : pairedDevices) { 
    String s = device.getName(); 

    if (s.equals(printerName)) { 
     printer = device; 
     break; 
    } 
} 

if (printer == null) 
    return 4; // Paired printer not found 

// create socket 
UUID BPP = UUID.fromString(UUID_BPP); 
BluetoothSocket socket; 

try { 
    socket = printer.createRfcommSocketToServiceRecord(BPP); 
} catch (IOException e) { 
    return 5; // Unable to create socket 
} 
/* 
try { 
    Method m = printer.getClass().getMethod("createRfcommSocket", 
     new Class[] { int.class }); 

    socket = (BluetoothSocket) m.invoke(printer, 1); 
} catch (Exception e1) { 
    return 5; // Unable to create socket 
} 
*/ 
try { 
    socket.connect(); 
} catch (IOException e) { 
    return 6; // Unable to connect socket 
} 
+0

Bien que j'ai fait chou blanc sur cette question. J'ai réussi à imprimer sur des imprimantes Wi-Fi, sans utiliser de logiciel tiers. –

Répondre

2

Je pense que la raison pourrait être que la pile Bluetooth sur Android que vous utilisez peut-être pas en charge le profil BPP, si vous utilisez les versions standard Android il ne supporte pas BPP.

Le mécanisme de création de socket échoue car l'imprimante n'implémente pas le profil SPP. Les exemples Android dépendent du SPP côté serveur pour être en mesure d'être en mesure de se connecter à partir du client. L'imprimante n'aura certainement pas de serveur SPP générique à l'écoute.

+0

Il peut s'agir d'Android ne supportant pas BPP. Je n'en sais pas assez sur Android pour faire un appel sur celui-là. Ironiquement, cela marche très bien sur Palm OS, qui utilise un paradigme beaucoup plus simple. –

+0

Une mise à jour sur ce sujet? Est-ce que Android supporte le BPP? Si l'imprimante ne prend pas en charge SPP, comment pouvons-nous effectuer une tâche d'impression à partir du téléphone? – Gopinath

+0

Android ne prend pas en charge IPP non plus, mais il existe un certain nombre d'applications Android payantes qui seront imprimées sur les imprimantes Wi-Fi, donc je pense que c'est juste une question de rouler les vôtres. HP ePrint fonctionnera si les deux appareils disposent d'une connexion Internet. –

1

Essayez ceci:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); 
tmp = (BluetoothSocket) m.invoke(device, 1); 
+2

Merci pour la suggestion. C'est la méthode alternative que j'ai mentionnée dans ma question initiale. Je l'ai déjà essayé, mais cela ne semble pas fonctionner dans mon cas. –

0

Il y a différents profils Bluetooth qui peut-être utilisé pour l'impression à savoir HCRP, BPP, SPP, OPP, etc. DirectPrinting (Ref: http://www.alanjmcf.me.uk/comms/bluetooth/Bluetooth%20Profiles%20and%2032feet.NET.html#_Toc266869878)

Essayez ces profils (UUID) pour essayer un 'socket.connect' avec l'imprimante ... Peut-être que votre périphérique Palm OS utiliserait un autre profil que BPP? Au fait, Philippe, pour votre imprimante HP DeskJet 450wbt, utilisez-vous un dongle Bluetooth générique ou quelque chose que vous avez acheté spécifiquement pour votre imprimante auprès de HP?

Ou votre imprimante prend-elle en charge le Bluetooth dès sa sortie de l'emballage, sans avoir besoin de brancher un adaptateur Bluetooth?

Peut-être vous pouvez répondre à ma question ici: can generic Bluetooth dongle be used for printers that support printing over Bluetooth?

Laissez-moi savoir comment cela fonctionne pour vous.

+0

Le 450wbt a un support Bluetooth intégré. La version Palm n'utilisait même pas un UUID complet - il suffit de définir les deux premiers octets. Je soupçonne fortement que le problème est avec Android, où la pile Bluetooth est très limitée, –

+0

Vous avez absolument raison. L'implémentation de la pile bluetooth actuellement sous Android ne fournit pas de support pour les profils Bluetooth (BPP, HCRP, etc.). Cependant, il existe une solution utilisant le "Sybase-iAnywhere-Blue-SDK-for-Android", qui implémente le Bluetooth Stack plus complet pour Android, en utilisant du code natif pour le noyau Linux sous-jacent d'Android. Reportez-vous ma réponse ci-dessus pour les liens et les informations concernant ce SDK. –

0

Si le modèle de votre téléphone (ici Android) prend en charge le profil d'impression Bluetooth, le téléphone prend en charge l'impression sur une imprimante Bluetooth. Si vous ne voyez aucun paramètre/option sur votre téléphone pour imprimer (à partir, par exemple, des applications de galerie photo intégrées) sur une imprimante Bluetooth, il est probable que le téléphone ne prend pas en charge l'impression Bluetooth.

Si le support n'est pas intégré, vous avez peu ou pas de chance d'ajouter le support; il doit provenir du fabricant de l'appareil (ici Android).

(Ref: http://discussion.forum.nokia.com/forum/showthread.php?76295-Bluetooth-printing-option-in-application)


Pour le support du profil Bluetooth pour être mis en œuvre sur Android, il y a un projet appelé « Sybase-iAnywhere-Blue-SDK-pour-Android », qui remplace la version Android, et fournit toutes les interfaces dans les profils et protocoles Bluetooth sous-jacents. En utilisant cela, l'impression sur Bluetooth à l'aide de votre téléphone Android sera possible en utilisant le profil BPP fourni par ce SDK.

Voir les liens ci-dessous pour plus de détails: Lien 1: http://www.sybase.com/detail?id=1064424 Link 2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks

Questions connexes