如何使用打印机(通过蓝牙打印)从android设备打印图像和一些数据?

如何使用打印机(通过蓝牙打印)从android设备打印图像和一些数据?,android,printing,bluetooth,Android,Printing,Bluetooth,我正在开发一个应用程序,其中我必须打印一张收据,收据有一个徽标(静态)图像视图,如何将其打印到蓝牙打印机?我还用GestureOverlayView进行了签名,现在我必须打印这个手势以及徽标和一些关于收据的数据 我还需要打印一条阿拉伯字符串。它显示在文本视图中。 为了显示签名,我在布局中使用图像视图。请检查图像, 我附上的图像,我必须打印,请给我一些打印它的想法 我可以在打印时更改格式,这意味着我不必以矩形打印数据,但图像对齐是主要问题,我将如何了解对齐?我会尽最大努力给出答案,然后您可以从已经

我正在开发一个应用程序,其中我必须打印一张收据,收据有一个徽标(静态)图像视图,如何将其打印到蓝牙打印机?我还用GestureOverlayView进行了签名,现在我必须打印这个手势以及徽标和一些关于收据的数据

我还需要打印一条阿拉伯字符串。它显示在文本视图中。 为了显示签名,我在布局中使用图像视图。请检查图像, 我附上的图像,我必须打印,请给我一些打印它的想法


我可以在打印时更改格式,这意味着我不必以矩形打印数据,但图像对齐是主要问题,我将如何了解对齐?

我会尽最大努力给出答案,然后您可以从已经询问的问题中获得解决方案

您有3个从android应用程序打印的选项

1> SDK/库:(与starmicronics一样,它仅限于少数设备)

2> 谷歌播放应用程序:(直接向第三方发送意向)

3> 谷歌云打印:(推荐使用。易于使用并集成到应用程序中) 通过这种方式,我们可以连接任何打印机,如经典打印机、云打印打印机

要使用Google print作为用户透视图,用户应激活gmail帐户的Google print服务

设置谷歌打印服务

将云打印机集成到应用程序:

在安卓系统中,没有像其他平台一样的打印选项,但谷歌为其提供了非常棒的云打印选项,任何打印机都可以从移动设备上使用打印选项

示例代码:


试着用这个

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();
  }
}

从这个链接中

我使用了这个代码,它工作得很好。。。但是它不会打印任意文本,所以如果你知道的话,你能帮我吗