Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

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.

Suggestions please. Thanks for your precious time!..

like image 429
prabu Avatar asked Mar 04 '14 10:03

prabu


People also ask

Can you print from an Android phone by Bluetooth to a printer?

You can print from an Android phone or tablet if you have a connection to a wireless printer. If your printer only supports Bluetooth printing, be sure to pair the printer with your Android phone.

How do I connect my Android phone to my mobile printer?

Start your mobile application and tap the Settings icon. (Mobile Cable Label Tool users must also tap [Printer Settings] - [Printer].) Select the printer listed under [Wi-Fi Printer]. You can now print from your device wirelessly.

Can I use Bluetooth to print from my phone?

Can I Print To Bluetooth Printer From Android? You can print documents and photos wirelessly from your Android device by connecting it to a printer. To print a document from an Android phone to a Bluetooth printer, select the document you want to print. Printer users can now print on their devices wirelessly.

Why cant my phone find my Bluetooth printer?

Make sure the mobile device's Bluetooth is turned on. Check to see if the printer's Bluetooth light is pulsing. If not, enable Bluetooth on the printer and try pairing with the printer again. Check if the printer is communicating with another mobile device.


2 Answers

Bluetooth Printer Android Example Create a new android project BlueToothPrinterApp in your editor.

Step 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:

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(“8 ce255c0 - 200 a - 11e0 - ac64 - 0800200 c9a66″);
    // 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:

Edit your main.xml file and paste below code.

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    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:

Now edit your AndroidManifest.xml

Add bluetooth permission and admin permission.

AndroidManifest.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<manifest
    xmlns:android=”http://schemas.android.com/apk/res/android
    package=”com.example.BlueToothPrinterApp”
    android:versionCode=”1″
    android:versionName=”1.0″>

    <uses-sdk android:minSdkVersion=”14″ />
    <uses-permission android:name=”android.permission.BLUETOOTH”></uses-permission>
    <uses-permission android:name=”android.permission.BLUETOOTH_ADMIN”></uses-permission>

    <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>

</manifest>

Compile and run this application. Enter message and press print button.

You will see list of bluetooth devices. Select bluettoth printer.

Check print on your bluetooth printer.

here is the CODE Reference...

like image 138
Naveed Ahmad Avatar answered Oct 15 '22 09:10

Naveed Ahmad


You can use this awesome lib, you can connect to any printer and print easily,

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)
like image 42
Mazen Rashed Avatar answered Oct 15 '22 09:10

Mazen Rashed