¿Cómo enviar datos a la impresora bluetooth va aplicación android?
Estoy desarrollando una aplicación que enviará datos a una impresora a través de bluetooth para imprimir (una impresora térmica para recibos). He seguido el código que en este enlace.
Http://pastie.org/6203514 y este enlace también http://pastie.org/6203516
- Envío de archivos Bluetooth de Android
- Android 2.1: ¿Cómo puedo consultar el valor RSSI de una conexión Bluetooth existente?
- Error de transmisión de datos mediante SPP sobre Bluetooth en Android
- Buscando Bluetooth cerca en 6.0.1
- Android Bluetooth: java.io.IOException: falla en el descubrimiento del servicio
Puedo ver el dispositivo y su dirección MAC y su nombre, cuando envío los datos a la impresora (el LED de luz en la impresora deja de parpadear y se convierte en estándar, es decir, la impresora está conectada con mi teléfono Android), pero cuando envío el Datos que no está imprimiendo y tampoco está dando ningún error también. He googled mucho y encontré muchos códigos y probé todo el conjunto de códigos pero no pude imprimir.
Por favor, cualquiera podría ayudarme a salir de aquí. He escuchado con Intents que se puede hacer fácilmente, pero no podía obtener la solución exacta con Intents.
Cualquier ayuda sería apreciada Gracias de antemano
Ganesh
- Programa se bloquea en ObjectInputStream método readObject.
- Señal fatal 11 SIGSEGV al cerrar BluetoothSocket en Android 4.2.2 y 4.3
- Transferir datos entre iOS y Android a través de Bluetooth?
- Lectura de datos desde un dispositivo bluetooth en android
- Bucle de actividad infinita al activar Bluetooth
- El conector Bluetooth de Android se bloquea
- Aplicación de impresión de Android para la impresora Zebra RW420
- Dispositivo BLE CC2541 no escaneado con la biblioteca de balizas android
Finalmente resolví este problema por mí mismo y el problema es que el byte de encabezado que estoy enviando a la impresora es el verdadero culpable. En realidad estoy enviando 170,1 (donde 170 es el primer byte que la impresora debe recibir y el segundo byte es el id de la impresora, me refiero a algunos COM puerto que estos dos valores son dados por el diseñador de tarjeta de control de impresora). Real tengo que enviar 170,2 donde 2 es la identificación de la impresora de modo que dé la impresión correcta y para cada impresora es común de enviar los datos basados en su tarjeta de control.
Gracias a muchos amigos y aquí está mi código que u puede utilizar este código para todos los tipos de impresoras (para POS-Impresoras térmicas)
public void IntentPrint(String txtvalue) { byte[] buffer = txtvalue.getBytes(); byte[] PrintHeader = { (byte) 0xAA, 0x55,2,0 }; PrintHeader[3]=(byte) buffer.length; InitPrinter(); if(PrintHeader.length>128) { value+="\nValue is more than 128 size\n"; txtLogin.setText(value); } else { try { for(int i=0;i<=PrintHeader.length-1;i++) { mmOutputStream.write(PrintHeader[i]); } for(int i=0;i<=buffer.length-1;i++) { mmOutputStream.write(buffer[i]); } mmOutputStream.close(); mmSocket.close(); } catch(Exception ex) { value+=ex.toString()+ "\n" +"Excep IntentPrint \n"; txtLogin.setText(value); } } }
Y este código para el resto:
public void InitPrinter() { try { if(!bluetoothAdapter.isEnabled()) { Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBluetooth, 0); } Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); if(pairedDevices.size() > 0) { for(BluetoothDevice device : pairedDevices) { if(device.getName().equals("Your Device Name")) //Note, you will need to change this to match the name of your device { mmDevice = device; break; } } UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //Standard SerialPortService ID //Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] { int.class }); //mmSocket = (BluetoothSocket) m.invoke(mmDevice, uuid); mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid); bluetoothAdapter.cancelDiscovery(); if(mmDevice.getBondState()==2) { mmSocket.connect(); mmOutputStream = mmSocket.getOutputStream(); } else { value+="Device not connected"; txtLogin.setText(value); } } else { value+="No Devices found"; txtLogin.setText(value); return; } } catch(Exception ex) { value+=ex.toString()+ "\n" +" InitPrinter \n"; txtLogin.setText(value); } }
¿Está buscando un protocolo específico de impresión? (Para impresora específica?)
Si no es así, y se puede hacer una impresión genérica a cualquier impresora conectada, puede utilizar este fragmento de código:
Escribe esto donde quieras imprimir un archivo o archivos específicos:
Intent intent = Tools.getSendToPrinterIntent( DisplayActivity.this, mPdfAsPictures, mPrintCurrentIndex); // notify the activity on return (will need to ask the user for // approvel) startActivityForResult(intent, ACTIVITY_PRINT);
Este es el método de ayuda:
public static Intent getSendToPrinterIntent(Context ctx, String[] fileFullPaths, int indexToPrint){ Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); // This type means we can send either JPEG, or PNG sendIntent.setType("image/*"); ArrayList<Uri> uris = new ArrayList<Uri>(); File fileIn = new File(fileFullPaths[indexToPrint]); Uri u = Uri.fromFile(fileIn); uris.add(u); sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); return sendIntent; }
Y finalmente, recibirá la respuesta en:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTIVITY_PRINT) { switch (resultCode) { case Activity.RESULT_CANCELED: Log.d(TAG(), "onActivityResult, resultCode = CANCELED"); break; case Activity.RESULT_FIRST_USER: Log.d(TAG(), "onActivityResult, resultCode = FIRST_USER"); break; case Activity.RESULT_OK: Log.d(TAG(), "onActivityResult, resultCode = OK"); break; } } };
¡Buena suerte!
- Servicio de Android que se reinicia cuando se cancela la aplicación
- ¿Podría alguien de una vez por todas explicar por favor No puedo llamar a determinedVisibility () – nunca vi una conexión para el pid