Skip to content

KuanChunChen/elegantAccessApp

Repository files navigation

Android低功耗藍芽Gatt連線教學:使用Kotlin實作

elegant_access_app

詳細教學:https://elegantaccess.org/2021/11/12/android-kotlin-bluetooth-gatt-client/

前言

我花了一些時間複習之前工作所實作的低功耗藍牙連接。
由於我擔心會忘記,
所以想重新回顧一下並做個紀錄,
希望也能幫助到需要實作的各位。

Android 12之後新增了 權限相關處理,大家可以注意一下!
這邊是我處理的方式,大家可以參考:

fun Context.hasPermission(permission: String): Boolean {
    return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
}

fun Context.hasBluetoothPermissions(): Boolean {

    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        hasPermission(Manifest.permission.BLUETOOTH_CONNECT) &&
                hasPermission(Manifest.permission.BLUETOOTH_SCAN) &&
                hasPermission(Manifest.permission.BLUETOOTH_ADVERTISE)
    } else {
        hasPermission(Manifest.permission.BLUETOOTH) &&
                hasPermission(Manifest.permission.BLUETOOTH_ADMIN) &&
                hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)
    }
}

fun Activity.requirePermission(permissions: Array<String>, requestCode: Int) {
    ActivityCompat.requestPermissions(this, permissions, requestCode)
}

fun Activity.requireBluetoothPermissions(requestCode: Int) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        requirePermission(
            arrayOf(
                Manifest.permission.BLUETOOTH_CONNECT,
                Manifest.permission.BLUETOOTH_SCAN,
                Manifest.permission.BLUETOOTH_ADVERTISE
            ), requestCode = requestCode
        )
    } else {
        requirePermission(
            arrayOf(
                Manifest.permission.BLUETOOTH,
                Manifest.permission.BLUETOOTH_ADMIN,
                Manifest.permission.ACCESS_FINE_LOCATION
            ), requestCode = requestCode
        )
    }
}

fun ActivityResultLauncher<Array<out String>>.requireBluetoothPermissions() {
    val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        arrayOf(
            Manifest.permission.BLUETOOTH_CONNECT,
            Manifest.permission.BLUETOOTH_SCAN,
            Manifest.permission.BLUETOOTH_ADVERTISE
        )
    } else {
        arrayOf(
            Manifest.permission.BLUETOOTH,
            Manifest.permission.BLUETOOTH_ADMIN,
            Manifest.permission.ACCESS_FINE_LOCATION
        )
    }
    this.launch(permissions)
}

About

elegant_access_app

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages