Files
tauri-plugin-bluclas/android/src/main/java/BluclasPlugin.kt
T
rizky_denianto cd139ab7c7
Penerbitan Plugin / persiapan (pull_request) Successful in 5s
Penerbitan Plugin / penerbitan (pull_request) Successful in 3m51s
Meletakkan argumen alamat ke variabel alamat
2026-09-03 23:06:13 +07:00

119 lines
3.2 KiB
Kotlin

package com.plugin.bluclas
import android.Manifest
import android.app.Activity
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothManager
import android.bluetooth.BluetoothSocket
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Permission
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Invoke
import app.tauri.plugin.JSArray
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import java.io.OutputStream
import java.util.*
@InvokeArg
class KirimArgs {
var alamat: String? = null
var data: ByteArray? = null
}
@TauriPlugin(
permissions = [
Permission(
strings = [
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_ADVERTISE
],
alias = "bluetooth"
)
]
)
class BluclasPlugin(private val activity: Activity) : Plugin(activity) {
private val uuidSpp: UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
private val adapter: BluetoothAdapter? = this.activity.getSystemService(BluetoothManager::class.java).getAdapter()
private var soket: BluetoothSocket? = null
private var keluaran: OutputStream? = null
@Command
override fun checkPermissions(invoke: Invoke) {
super.checkPermissions(invoke)
}
@Command
override fun requestPermissions(invoke: Invoke) {
super.requestPermissions(invoke)
}
@Command
fun daftarPerangkat(invoke: Invoke) {
if (adapter == null) {
invoke.reject("Bluetooth tidak didukung")
return
}
val daftarRes = JSArray()
adapter.bondedDevices.map { i ->
val res = JSObject()
res.put("nama", i.name ?: "Unknown")
res.put("alamat", i.address)
daftarRes.put(res)
}
val objekDaftarRes = JSObject()
objekDaftarRes.put("data", daftarRes)
invoke.resolve(objekDaftarRes)
}
fun menghubungkanKoneksi(alamat: String) {
val perangkat: BluetoothDevice = adapter!!.getRemoteDevice(alamat)
soket = perangkat.createInsecureRfcommSocketToServiceRecord(uuidSpp)
soket!!.connect()
keluaran = soket!!.outputStream
}
fun memutusKoneksi() {
keluaran?.close()
keluaran = null
soket?.close()
soket = null
}
@Command
fun kirim(invoke: Invoke) {
val args = invoke.parseArgs(KirimArgs::class.java)
val alamat = args.alamat
if (alamat.isNullOrEmpty()) {
invoke.resolve()
return
}
try {
menghubungkanKoneksi(alamat)
if (keluaran == null) {
throw Exception("Tidak ada perangkat yang terhubung")
}
keluaran!!.write(args.data)
keluaran!!.flush()
} catch (e: Exception) {
memutusKoneksi()
invoke.reject("Mengirim data ke perangkat gagal: ${e.message}")
return
}
memutusKoneksi()
invoke.resolve()
}
}