简体   繁体   English

如何在Android中通过蓝牙连接手机和打印机?

[英]How to connect a mobile and a printer via bluetooth in android?

Can anyone tell me how to connect a mobile and a printer via bluetooth to print a text file in android? 任何人都可以告诉我如何通过蓝牙连接手机打印机在Android中打印文本文件?

That is,if i click the print button from the android application,the printer has to print that corresponding file.As per my knowledge i have searched for it in Google, but i couldn't find any good samples to do it.Has anyone have at-least one sample android program to do this, it will be better to clear my chaos. 也就是说,如果我从Android应用程序中单击打印按钮,打印机必须打印相应的文件。据我所知,我已经在谷歌搜索过它,但我找不到任何好的样本来做它。有没有人至少有一个示例android程序来做到这一点,最好清除我的混乱。

Suggestions please. 建议请。 Thanks for your precious time!.. 谢谢你宝贵的时间!

Bluetooth Printer Android Example Create a new android project BlueToothPrinterApp in your editor. 蓝牙打印机Android示例在编辑器中创建一个新的Android项目BlueToothPrinterApp。

Step 1: 步骤1:

Create main activity like below 创建如下的主要活动

com.example.BlueToothPrinterApp/BlueToothPrinterApp.java

package com.example.BlueToothPrinterApp;

import android.app.Activity;
import android.os.Bundle;
import java.io.IOException;
import java.io.OutputStream;
import android.bluetooth.BluetoothSocket;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class BlueToothPrinterApp extends Activity
{
/** Called when the activity is first created. */
EditText message;
Button printbtn;

byte FONT_TYPE;
private static BluetoothSocket btsocket;
private static OutputStream btoutputstream;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
message = (EditText)findViewById(R.id.message);
printbtn = (Button)findViewById(R.id.printButton);

printbtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
connect();
}
});
}

protected void connect() {
if(btsocket == null){
Intent BTIntent = new Intent(getApplicationContext(), BTDeviceList.class);
this.startActivityForResult(BTIntent, BTDeviceList.REQUEST_CONNECT_BT);
}
else{

OutputStream opstream = null;
try {
opstream = btsocket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
btoutputstream = opstream;
print_bt();

}

}
private void print_bt() {
try {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

btoutputstream = btsocket.getOutputStream();

byte[] printformat = { 0x1B, 0×21, FONT_TYPE };
btoutputstream.write(printformat);
String msg = message.getText().toString();
btoutputstream.write(msg.getBytes());
btoutputstream.write(0x0D);
btoutputstream.write(0x0D);
btoutputstream.write(0x0D);
btoutputstream.flush();
} catch (IOException e) {
e.printStackTrace();
}

}

@Override
protected void onDestroy() {
super.onDestroy();
try {
if(btsocket!= null){
btoutputstream.close();
btsocket.close();
btsocket = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
btsocket = BTDeviceList.getSocket();
if(btsocket != null){
print_bt();
}

} catch (Exception e) {
e.printStackTrace();
}
}
}

Step 2: 第2步:

com.example.BlueToothPrinterApp/BTDeviceList.java

package com.example.BlueToothPrinterApp;

import java.io.IOException;
import java.util.Set;
import java.util.UUID;

import android.app.ListActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class BTDeviceList extends ListActivity {

static public final int REQUEST_CONNECT_BT = 0×2300;

static private final int REQUEST_ENABLE_BT = 0×1000;

static private BluetoothAdapter mBluetoothAdapter = null;

static private ArrayAdapter<String> mArrayAdapter = null;

static private ArrayAdapter<BluetoothDevice> btDevices = null;

private static final UUID SPP_UUID = UUID
.fromString(“8ce255c0-200a-11e0-ac64-0800200c9a66″);
// UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”);

static private BluetoothSocket mbtSocket = null;

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

setTitle(“Bluetooth Devices”);

try {
if (initDevicesList() != 0) {
this.finish();
return;
}

} catch (Exception ex) {
this.finish();
return;
}

IntentFilter btIntentFilter = new IntentFilter(
BluetoothDevice.ACTION_FOUND);
registerReceiver(mBTReceiver, btIntentFilter);
}

public static BluetoothSocket getSocket() {
return mbtSocket;
}

private void flushData() {
try {
if (mbtSocket != null) {
mbtSocket.close();
mbtSocket = null;
}

if (mBluetoothAdapter != null) {
mBluetoothAdapter.cancelDiscovery();
}

if (btDevices != null) {
btDevices.clear();
btDevices = null;
}

if (mArrayAdapter != null) {
mArrayAdapter.clear();
mArrayAdapter.notifyDataSetChanged();
mArrayAdapter.notifyDataSetInvalidated();
mArrayAdapter = null;
}

finalize();

} catch (Exception ex) {
} catch (Throwable e) {
}

}
private int initDevicesList() {

flushData();

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
Toast.makeText(getApplicationContext(),
“Bluetooth not supported!!”, Toast.LENGTH_LONG).show();
return -1;
}

if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}

mArrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1);

setListAdapter(mArrayAdapter);

Intent enableBtIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
try {
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
} catch (Exception ex) {
return -2;
}

Toast.makeText(getApplicationContext(),
“Getting all available Bluetooth Devices”, Toast.LENGTH_SHORT)
.show();

return 0;

}

@Override
protected void onActivityResult(int reqCode, int resultCode, Intent intent) {
super.onActivityResult(reqCode, resultCode, intent);

switch (reqCode) {
case REQUEST_ENABLE_BT:

if (resultCode == RESULT_OK) {
Set<BluetoothDevice> btDeviceList = mBluetoothAdapter
.getBondedDevices();
try {
if (btDeviceList.size() > 0) {

for (BluetoothDevice device : btDeviceList) {
if (btDeviceList.contains(device) == false) {

btDevices.add(device);

mArrayAdapter.add(device.getName() + “\n”
+ device.getAddress());
mArrayAdapter.notifyDataSetInvalidated();
}
}
}
} catch (Exception ex) {
}
}

break;
}

mBluetoothAdapter.startDiscovery();

}

private final BroadcastReceiver mBTReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

try {
if (btDevices == null) {
btDevices = new ArrayAdapter<BluetoothDevice>(
getApplicationContext(), android.R.id.text1);
}

if (btDevices.getPosition(device) < 0) {
btDevices.add(device);
mArrayAdapter.add(device.getName() + “\n”
+ device.getAddress() + “\n” );
mArrayAdapter.notifyDataSetInvalidated();
}
} catch (Exception ex) {
// ex.fillInStackTrace();
}
}
}
};

@Override
protected void onListItemClick(ListView l, View v, final int position,
long id) {
super.onListItemClick(l, v, position, id);

if (mBluetoothAdapter == null) {
return;
}

if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}

Toast.makeText(
getApplicationContext(),
“Connecting to ” + btDevices.getItem(position).getName() + “,”
+ btDevices.getItem(position).getAddress(),
Toast.LENGTH_SHORT).show();

Thread connectThread = new Thread(new Runnable() {

@Override
public void run() {
try {
boolean gotuuid = btDevices.getItem(position)
.fetchUuidsWithSdp();
UUID uuid = btDevices.getItem(position).getUuids()[0]
.getUuid();
mbtSocket = btDevices.getItem(position)
.createRfcommSocketToServiceRecord(uuid);

mbtSocket.connect();
} catch (IOException ex) {
runOnUiThread(socketErrorRunnable);
try {
mbtSocket.close();
} catch (IOException e) {
// e.printStackTrace();
}
mbtSocket = null;
return;
} finally {
runOnUiThread(new Runnable() {

@Override
public void run() {
finish();

}
});
}
}
});

connectThread.start();
}

private Runnable socketErrorRunnable = new Runnable() {

@Override
public void run() {
Toast.makeText(getApplicationContext(),
“Cannot establish connection”, Toast.LENGTH_SHORT).show();
mBluetoothAdapter.startDiscovery();

}
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);

menu.add(0, Menu.FIRST, Menu.NONE, “Refresh Scanning”);

return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);

switch (item.getItemId()) {
case Menu.FIRST:
initDevicesList();
break;
}

return true;
}
}

Step 3: 第3步:

Edit your main.xml file and paste below code. 编辑main.xml文件并粘贴下面的代码。

res/layout/main.xml RES /布局/ main.xml中

<?xml version=”1.0″ encoding=”utf-8″?>
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:paddingLeft=”16dp”
android:paddingRight=”16dp” >

  <TextView
    android:id="@+id/msgtextlbl"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Enter Your Message : "/>

<EditText
    android:id="@+id/message"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:layout_below="@+id/msgtextlbl"
    android:text=""/>

<Button
    android:id="@+id/printButton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/message"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dip"
    android:text="Print"/>
</RelativeLayout>

Step 4: 第4步:

Now edit your AndroidManifest.xml 现在编辑你的AndroidManifest.xml

Add bluetooth permission and admin permission. 添加蓝牙权限和管理员权限。

AndroidManifest.xml AndroidManifest.xml中

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
package=”com.example.BlueToothPrinterApp”
android:versionCode=”1″
android:versionName=”1.0″>
<application android:label=”@string/app_name” android:icon=”@drawable/ic_launcher”>
<activity android:name=”BlueToothPrinterApp”
android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”BTDeviceList”></activity>
</application>
<uses-sdk android:minSdkVersion=”14″ />
<uses-permission android:name=”android.permission.BLUETOOTH”></uses-permission>
<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN”></uses-permission>
</manifest>

Compile and run this application. 编译并运行此应用程序。 Enter message and press print button. 输入信息并按打印按钮。

You will see list of bluetooth devices. 您将看到蓝牙设备列表。 Select bluettoth printer. 选择bluettoth打印机。

Check print on your bluetooth printer. 检查蓝牙打印机上的打印件。

here is the CODE Reference... 这是CODE参考...

You can use this awesome lib, you can connect to any printer and print easily, 你可以使用这个很棒的lib,你可以连接到任何打印机并轻松打印,

https://github.com/mazenrashed/Printooth https://github.com/mazenrashed/Printooth

you can download it by: 你可以下载:

implementation 'com.github.mazenrashed:Printooth:${LAST_VERSION}'

and use it like: 并使用它像:

var printables = ArrayList<Printable>()
var printable = Printable.PrintableBuilder()  
.setText("Hello World")

printables.add(printable)

BluetoothPrinter.printer().print(printables)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM