Koneksi socket ke printer bluetooth diperlukan agar bisa menggunakannya untuk ngeprint dari device Android. Setelah kita mengetahui device mana saja yang terpasang (paired) dengan device android melalui sambungan bluetooth selanjutnya kita bisa memilih salah satu device itu intuk disambungkan melalui koneksi socket.
Sebelum mengikuti artikel ini lebih lanjut, ada baiknya baca artikel sebelumnya tentang cara mendapatkan daftar perangkat bluetooth tersambung.
Persiapan Variabel
Pertama, kita buat variabel appliactionUUID menggunakan class java.util.UUID
service printer bluetooth yang secara umum digunakan adalah sebagai berikut:
protected var applicationUUID: UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
Nilai string “00001101-0000-1000-8000-00805F9B34FB” merupakan kode service printer bluetooth. Ketika kita ingin menyambungkan printer bluetooth menggunakan Javascript pun menggunakan nilai string tersebut untuk mengisi nilai service.
Selanjutnya kita perlu mendeklarasikan juga variable socket dan outputStream secara global agar ketika keduanya dibutuhkan di dalam maupun luar fungsi bisa mudah diakses.
lateinit var outputStream: OutputStream
lateinit var socket: BluetoothSocket
Kita inisiasi variable adapter dulu agar bisa menggunakan adapter Bluetooth sehingga bisa menggunakannya untuk berkomunikasi dengan printer melalui socket.
val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val adapter = bluetoothManager.adapter
Nah dari adapter itu, kita bisa mendapatkan remote device menggunakan Mac Address. Dengan kata lain, kita memanggil device yang telah dipasangkan dengan android menggunakan MAC Addresnya.
Menginisiasi Device & Membuat Koneksi Socket
Cara mendapatkan Mac Address lihat artikel sebelumnya Cara Mendapatkan Daftar Perangkat Bluetooth Tersambung. deviceAddress di situ adalah Mac Address yang bisa kita gunakan untuk mendapatkan device di sini. Caranya sebagai berikut:
val device = adapter.getRemoteDevice(MAC_ADDRESS)
Ganti MAC_ADDRESS tersebut dengan nilai yang didapat dari device. Setelah itu, kita bisa menyambungkan device tersebut melalui socket dengan cara berikut:
socket = device.createRfcommSocketToServiceRecord(applicationUUID)
socket.connect()
outputStream = socket.outputStream
Nah. Sekarang kita bisa mengirim teks untuk dicetak ke printer dengan kode sederhana berikut:
outputStream.write("Tes printer".toByteArray())
Kenapa string harus diubah ke ByteArray()? ya karena argument write hanya menerima data jenis ByteArray() dan Int(). Kita pilih ByteArray() saja.
Catatan-Catatan
Untuk dapat menggunakan printer bluetooth melalui koneksi socket, kita perlu memeriksa dulu hal-hal sebagai berikut:
Pertama memeriksa apakah device android sudah memiliki ijin/permission penggunaan BLUETOOTH_SCAN dan BLUETOOTH_CONNECT apa belum. Contoh cara memeriksanya sebagai berikut:
if (checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(
Manifest.permission.BLUETOOTH_CONNECT
) == PackageManager.PERMISSION_GRANTED
) {
// kode yang perlu dieksekusi jika sudah memiliki ijin/permission penggunaan bluetooth
}
Jika tidak memiliki ijin maka perlu meminta ijin penggunakan bluetooth terlebih dahulu secara runtime. bagian ini akan dibahas pada artikel terpisah.
Kedua cek apakah bluetooth di android sudah diaktifkan atau belum. Contoh cara mengeceknya adalah sebagai berikut:
if (adapter.isEnabled) {
//kode untuk koneksi socket ada di sini
}
Jika bluetooth ternyata belum aktif maka perlu minta aktifkan bluetooth secara runtime. Artikel tentang ini akan dibahas pada bagian lain.
Selain itu, agar ketika ada kesalahan koneksi tidak langsung membuat force close atau aplikasi android menutup sendiri, gunakan try() dan catch(). Contohnya sebagai berikut:
try {
// kodingan koneksi socket di sini
}catch (e: Exception) {
e.printStackTrace()
}