6

I am developing one app in which i have to print one receipt, receipt has one logo(static) image view, how can i print this to bluetooth printer? and also i have taken signature by using GestureOverlayView, now i have to print that gesture as well along with logo and some data regarding the receipt.enter image description here

and i need to print one arabic string as well. which is shown in the TEXT VIEW. for showing signature i am using image view in my layout. Please check the image, i am attaching the image which i have to print, please give me some idea about printing it.

i can change the format in printing, means i dont have to print data in rectangles, but image alignment is the main issue, how will i get to know about alignment?

UdiT
  • 609
  • 1
  • 6
  • 21

2 Answers2

9

Try using this one....

public class BluetoothPrinterActivity extends Activity {

BluetoothAdapter mBTAdapter;
BluetoothSocket mBTSocket = null;
Dialog dialogProgress;
String BILL, TRANS_ID;
String PRINTER_MAC_ID = "00:1F:B7:02:8F:44";
final String ERROR_MESSAGE = "There has been an error in printing the bill.";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {

        BILL = "\nSale Slip No: 12345678" + " " + "04-08-2011\n";
        BILL = BILL + "----------------------------------------";
        BILL = BILL + "\n\n";
        BILL = BILL + "Total Qty:" + " " + "2.0\n";
        BILL = BILL + "Total Value:" + " " + "17625.0\n";
        BILL = BILL + "-----------------------------------------";

        mBTAdapter = BluetoothAdapter.getDefaultAdapter();

        if (mBTAdapter == null) {
            Toast.makeText(this, "Device has no bluetooth capability",Toast.LENGTH_LONG).show();
            finish();
        } else {
            if (!mBTAdapter.isEnabled()) {
                Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(i, 0);
            }

            // Register the BroadcastReceiver
            IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

            dialogProgress = new Dialog(BluetoothPrinterActivity.this);
            dialogProgress.setTitle("Finding printer...");
            dialogProgress.setOnDismissListener(new DialogInterface.OnDismissListener() {
                        public void onDismiss(DialogInterface dialog) {
                            dialog.dismiss();
                            setResult(RESULT_CANCELED);
                            finish();
                        }
                    });
            dialogProgress.show();

        }

        if (mBTAdapter.isDiscovering())
            mBTAdapter.cancelDiscovery();
        else
            mBTAdapter.startDiscovery();

        System.out.println("BT Searching status :" + mBTAdapter.isDiscovering());

    } catch (Exception e) {
        Log.e("Class ", "My Exe ", e);
    }
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        try {
            String action = intent.getAction();
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                System.out.println("***" + device.getName() + " : "+ device.getAddress());

                if (device.getAddress().equalsIgnoreCase(PRINTER_MAC_ID)) {
                    mBTAdapter.cancelDiscovery();
                    dialogProgress.dismiss();
                    Toast.makeText(BluetoothPrinterActivity.this,device.getName() + " Printing data",Toast.LENGTH_LONG).show();
                    printBillToDevice(PRINTER_MAC_ID);
                    Toast.makeText(BluetoothPrinterActivity.this,device.getName() + " found", Toast.LENGTH_LONG).show();
                }
            }
        } catch (Exception e) {
            Log.e("Class ", "My Exe ", e);
        }
    }
};


@Override
protected void onDestroy() {
    super.onDestroy();
    try {
        if (dialogProgress != null)
            dialogProgress.dismiss();
        if (mBTAdapter != null)
            mBTAdapter.cancelDiscovery();
        this.unregisterReceiver(mReceiver);
    } catch (Exception e) {
        Log.e("Class ", "My Exe ", e);
    }
}


@Override
public void onBackPressed() {
    try {
        if (mBTAdapter != null)
            mBTAdapter.cancelDiscovery();
            this.unregisterReceiver(mReceiver);
    } catch (Exception e) {
        Log.e("Class ", "My Exe ", e);
    }
    setResult(RESULT_CANCELED);
    finish();
}


public void printBillToDevice(final String address) {
    new Thread(new Runnable() {
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    dialogProgress.setTitle("Connecting...");
                    dialogProgress.show();
                }

            });

            mBTAdapter.cancelDiscovery();

            try {
                System.out.println("**************************#****connecting");
                BluetoothDevice mdevice = mBTAdapter.getRemoteDevice(address);
                Method m = mdevice.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
                mBTSocket = (BluetoothSocket) m.invoke(mdevice, 1);

                mBTSocket.connect();
                OutputStream os = mBTSocket.getOutputStream();
                os.flush();

                os.write(BILL.getBytes());
                System.out.println(BILL);

                setResult(RESULT_OK);
                finish();
            } catch (Exception e) {
                Log.e("Class ", "My Exe ", e);
                e.printStackTrace();
                setResult(RESULT_CANCELED);
                finish();

            }

            runOnUiThread(new Runnable() {
                public void run() {
                    try {
                        dialogProgress.dismiss();
                    } catch (Exception e) {
                        Log.e("Class ", "My Exe ", e);
                    }
                }

            });

        }

    }).start();
  }
}

from this link Bluetooth Printer issue in android

Community
  • 1
  • 1
3

I try my best to give the answer before that you can get the solution from already asked questions

you have 3 options for printing from android app

1>SDKs/Libraries: (like starmicronics, it's limited to few devices)

2>Google Play Apps: (directly calling the intent to thirparty apps)

3>Google cloud print: (recommended. It's easy to use and integrate into an app) By this we connect any printers like Classic printers, Cloud Print printers.

for using Google print as user perspective user should activate google print service to gmail account, Google cloud print used in many places!

Setting up the google print service:

Blog

https://stackoverflow.com/questions/11323805/how-to-setup-network-printer-to-google-cloud-print/14911180#14911180

Google cloud print set up1

Google cloud print set up2

Printing via gchrome

Google cloud printers

Integrating Cloud printers to App:

In Android there no option for Airprint like other platforms, but Google made awesome cloud printing option for that such that any printer can use the print option from mobile devices.

Sample codes:

funcode

Google cloud print code

Community
  • 1
  • 1
LOG_TAG
  • 19,894
  • 12
  • 72
  • 105