Fix the issue that advertisement name is wrong when advertising. (#78)
* Fix the issue that advertisement name is wrong when advertising. * Update CHANGELOG.md * Fix the warning issue. * 6.0.1 --------- Co-authored-by: yanshouwang <yanshouwang@outlook.com>
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
## 6.0.1
|
||||||
|
|
||||||
|
* `Android` Fix the issue that [advertisement name is wrong when advertising](https://github.com/yanshouwang/bluetooth_low_energy/issues/62).
|
||||||
|
|
||||||
## 6.0.0
|
## 6.0.0
|
||||||
|
|
||||||
* [Add `CentralManager#retrieveConnectedPeripherals` method.](https://github.com/yanshouwang/bluetooth_low_energy/issues/61)
|
* [Add `CentralManager#retrieveConnectedPeripherals` method.](https://github.com/yanshouwang/bluetooth_low_energy/issues/61)
|
||||||
|
@ -23,15 +23,15 @@ packages:
|
|||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "6.0.0"
|
version: "6.0.1"
|
||||||
bluetooth_low_energy_android:
|
bluetooth_low_energy_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: bluetooth_low_energy_android
|
name: bluetooth_low_energy_android
|
||||||
sha256: "39284bb33a10cc3bc126e18968865f47fc0155495a7473afc705eb4be8b07728"
|
sha256: "97cac5169a392f3872cbb416cc11cf0b2287567c0ceca4d975f2fc5bdd2b1e6f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.0"
|
version: "6.0.2"
|
||||||
bluetooth_low_energy_darwin:
|
bluetooth_low_energy_darwin:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: bluetooth_low_energy
|
name: bluetooth_low_energy
|
||||||
description: "A Flutter plugin for controlling the bluetooth low energy, supports central and peripheral roles."
|
description: "A Flutter plugin for controlling the bluetooth low energy, supports central and peripheral roles."
|
||||||
version: 6.0.0
|
version: 6.0.1
|
||||||
homepage: https://github.com/yanshouwang/bluetooth_low_energy
|
homepage: https://github.com/yanshouwang/bluetooth_low_energy
|
||||||
repository: https://github.com/yanshouwang/bluetooth_low_energy
|
repository: https://github.com/yanshouwang/bluetooth_low_energy
|
||||||
issue_tracker: https://github.com/yanshouwang/bluetooth_low_energy/issues
|
issue_tracker: https://github.com/yanshouwang/bluetooth_low_energy/issues
|
||||||
@ -20,7 +20,7 @@ dependencies:
|
|||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
bluetooth_low_energy_platform_interface: ^6.0.0
|
bluetooth_low_energy_platform_interface: ^6.0.0
|
||||||
bluetooth_low_energy_android: ^6.0.0
|
bluetooth_low_energy_android: ^6.0.2
|
||||||
bluetooth_low_energy_darwin: ^6.0.0
|
bluetooth_low_energy_darwin: ^6.0.0
|
||||||
bluetooth_low_energy_windows: ^6.0.0
|
bluetooth_low_energy_windows: ^6.0.0
|
||||||
bluetooth_low_energy_linux: ^6.0.0
|
bluetooth_low_energy_linux: ^6.0.0
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
## 6.0.2
|
||||||
|
|
||||||
|
* Fix the warning issue.
|
||||||
|
|
||||||
|
## 6.0.1
|
||||||
|
|
||||||
|
* Fix the issue that [advertisement name is wrong when advertising](https://github.com/yanshouwang/bluetooth_low_energy/issues/62).
|
||||||
|
|
||||||
## 6.0.0
|
## 6.0.0
|
||||||
|
|
||||||
* Add `serviceUUIDs` argument to `CentralManager#startDiscovery` method.
|
* Add `serviceUUIDs` argument to `CentralManager#startDiscovery` method.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Autogenerated from Pigeon (v19.0.0), do not edit directly.
|
// Autogenerated from Pigeon (v19.0.2), do not edit directly.
|
||||||
// See also: https://pub.dev/packages/pigeon
|
// See also: https://pub.dev/packages/pigeon
|
||||||
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
|
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
|
||||||
|
|
||||||
@ -63,6 +63,31 @@ enum class MyBluetoothLowEnergyStateArgs(val raw: Int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class MyAdvertiseModeArgs(val raw: Int) {
|
||||||
|
LOW_POWER(0),
|
||||||
|
BALANCED(1),
|
||||||
|
LOW_LATENCY(2);
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun ofRaw(raw: Int): MyAdvertiseModeArgs? {
|
||||||
|
return values().firstOrNull { it.raw == raw }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class MyTXPowerLevelArgs(val raw: Int) {
|
||||||
|
ULTRA_LOW(0),
|
||||||
|
LOW(1),
|
||||||
|
MEDIUM(2),
|
||||||
|
HIGH(3);
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun ofRaw(raw: Int): MyTXPowerLevelArgs? {
|
||||||
|
return values().firstOrNull { it.raw == raw }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum class MyConnectionStateArgs(val raw: Int) {
|
enum class MyConnectionStateArgs(val raw: Int) {
|
||||||
DISCONNECTED(0),
|
DISCONNECTED(0),
|
||||||
CONNECTING(1),
|
CONNECTING(1),
|
||||||
@ -234,6 +259,69 @@ data class MyAdvertisementArgs (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Generated class from Pigeon that represents data sent in messages. */
|
||||||
|
data class MyAdvertiseSettingsArgs (
|
||||||
|
val modeArgs: MyAdvertiseModeArgs? = null,
|
||||||
|
val connectableArgs: Boolean? = null,
|
||||||
|
val timeoutArgs: Long? = null,
|
||||||
|
val txPowerLevelArgs: MyTXPowerLevelArgs? = null
|
||||||
|
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
@Suppress("LocalVariableName")
|
||||||
|
fun fromList(__pigeon_list: List<Any?>): MyAdvertiseSettingsArgs {
|
||||||
|
val modeArgs: MyAdvertiseModeArgs? = (__pigeon_list[0] as Int?)?.let { num ->
|
||||||
|
MyAdvertiseModeArgs.ofRaw(num)
|
||||||
|
}
|
||||||
|
val connectableArgs = __pigeon_list[1] as Boolean?
|
||||||
|
val timeoutArgs = __pigeon_list[2].let { num -> if (num is Int) num.toLong() else num as Long? }
|
||||||
|
val txPowerLevelArgs: MyTXPowerLevelArgs? = (__pigeon_list[3] as Int?)?.let { num ->
|
||||||
|
MyTXPowerLevelArgs.ofRaw(num)
|
||||||
|
}
|
||||||
|
return MyAdvertiseSettingsArgs(modeArgs, connectableArgs, timeoutArgs, txPowerLevelArgs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fun toList(): List<Any?> {
|
||||||
|
return listOf<Any?>(
|
||||||
|
modeArgs?.raw,
|
||||||
|
connectableArgs,
|
||||||
|
timeoutArgs,
|
||||||
|
txPowerLevelArgs?.raw,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generated class from Pigeon that represents data sent in messages. */
|
||||||
|
data class MyAdvertiseDataArgs (
|
||||||
|
val includeDeviceNameArgs: Boolean? = null,
|
||||||
|
val includeTXPowerLevelArgs: Boolean? = null,
|
||||||
|
val serviceUUIDsArgs: List<String?>,
|
||||||
|
val serviceDataArgs: Map<String?, ByteArray?>,
|
||||||
|
val manufacturerSpecificDataArgs: List<MyManufacturerSpecificDataArgs?>
|
||||||
|
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
@Suppress("LocalVariableName")
|
||||||
|
fun fromList(__pigeon_list: List<Any?>): MyAdvertiseDataArgs {
|
||||||
|
val includeDeviceNameArgs = __pigeon_list[0] as Boolean?
|
||||||
|
val includeTXPowerLevelArgs = __pigeon_list[1] as Boolean?
|
||||||
|
val serviceUUIDsArgs = __pigeon_list[2] as List<String?>
|
||||||
|
val serviceDataArgs = __pigeon_list[3] as Map<String?, ByteArray?>
|
||||||
|
val manufacturerSpecificDataArgs = __pigeon_list[4] as List<MyManufacturerSpecificDataArgs?>
|
||||||
|
return MyAdvertiseDataArgs(includeDeviceNameArgs, includeTXPowerLevelArgs, serviceUUIDsArgs, serviceDataArgs, manufacturerSpecificDataArgs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fun toList(): List<Any?> {
|
||||||
|
return listOf<Any?>(
|
||||||
|
includeDeviceNameArgs,
|
||||||
|
includeTXPowerLevelArgs,
|
||||||
|
serviceUUIDsArgs,
|
||||||
|
serviceDataArgs,
|
||||||
|
manufacturerSpecificDataArgs,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Generated class from Pigeon that represents data sent in messages. */
|
/** Generated class from Pigeon that represents data sent in messages. */
|
||||||
data class MyCentralArgs (
|
data class MyCentralArgs (
|
||||||
val addressArgs: String
|
val addressArgs: String
|
||||||
@ -503,7 +591,7 @@ interface MyCentralManagerHostAPI {
|
|||||||
fun initialize(): MyCentralManagerArgs
|
fun initialize(): MyCentralManagerArgs
|
||||||
fun getState(): MyBluetoothLowEnergyStateArgs
|
fun getState(): MyBluetoothLowEnergyStateArgs
|
||||||
fun authorize(callback: (Result<Boolean>) -> Unit)
|
fun authorize(callback: (Result<Boolean>) -> Unit)
|
||||||
fun showAppSettings(callback: (Result<Unit>) -> Unit)
|
fun showAppSettings()
|
||||||
fun startDiscovery(serviceUUIDsArgs: List<String>, callback: (Result<Unit>) -> Unit)
|
fun startDiscovery(serviceUUIDsArgs: List<String>, callback: (Result<Unit>) -> Unit)
|
||||||
fun stopDiscovery()
|
fun stopDiscovery()
|
||||||
fun connect(addressArgs: String, callback: (Result<Unit>) -> Unit)
|
fun connect(addressArgs: String, callback: (Result<Unit>) -> Unit)
|
||||||
@ -524,6 +612,7 @@ interface MyCentralManagerHostAPI {
|
|||||||
MyCentralManagerHostAPICodec
|
MyCentralManagerHostAPICodec
|
||||||
}
|
}
|
||||||
/** Sets up an instance of `MyCentralManagerHostAPI` to handle messages through the `binaryMessenger`. */
|
/** Sets up an instance of `MyCentralManagerHostAPI` to handle messages through the `binaryMessenger`. */
|
||||||
|
@JvmOverloads
|
||||||
fun setUp(binaryMessenger: BinaryMessenger, api: MyCentralManagerHostAPI?, messageChannelSuffix: String = "") {
|
fun setUp(binaryMessenger: BinaryMessenger, api: MyCentralManagerHostAPI?, messageChannelSuffix: String = "") {
|
||||||
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
|
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
|
||||||
run {
|
run {
|
||||||
@ -578,14 +667,13 @@ interface MyCentralManagerHostAPI {
|
|||||||
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.bluetooth_low_energy_android.MyCentralManagerHostAPI.showAppSettings$separatedMessageChannelSuffix", codec)
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.bluetooth_low_energy_android.MyCentralManagerHostAPI.showAppSettings$separatedMessageChannelSuffix", codec)
|
||||||
if (api != null) {
|
if (api != null) {
|
||||||
channel.setMessageHandler { _, reply ->
|
channel.setMessageHandler { _, reply ->
|
||||||
api.showAppSettings() { result: Result<Unit> ->
|
val wrapped: List<Any?> = try {
|
||||||
val error = result.exceptionOrNull()
|
api.showAppSettings()
|
||||||
if (error != null) {
|
listOf<Any?>(null)
|
||||||
reply.reply(wrapError(error))
|
} catch (exception: Throwable) {
|
||||||
} else {
|
wrapError(exception)
|
||||||
reply.reply(wrapResult(null))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
reply.reply(wrapped)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
channel.setMessageHandler(null)
|
channel.setMessageHandler(null)
|
||||||
@ -1005,30 +1093,35 @@ private object MyPeripheralManagerHostAPICodec : StandardMessageCodec() {
|
|||||||
return when (type) {
|
return when (type) {
|
||||||
128.toByte() -> {
|
128.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
MyAdvertisementArgs.fromList(it)
|
MyAdvertiseDataArgs.fromList(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
129.toByte() -> {
|
129.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
MyManufacturerSpecificDataArgs.fromList(it)
|
MyAdvertiseSettingsArgs.fromList(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
130.toByte() -> {
|
130.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
MyMutableGATTCharacteristicArgs.fromList(it)
|
MyManufacturerSpecificDataArgs.fromList(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
131.toByte() -> {
|
131.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
MyMutableGATTDescriptorArgs.fromList(it)
|
MyMutableGATTCharacteristicArgs.fromList(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
132.toByte() -> {
|
132.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
MyMutableGATTServiceArgs.fromList(it)
|
MyMutableGATTDescriptorArgs.fromList(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
133.toByte() -> {
|
133.toByte() -> {
|
||||||
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
|
MyMutableGATTServiceArgs.fromList(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
134.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
MyPeripheralManagerArgs.fromList(it)
|
MyPeripheralManagerArgs.fromList(it)
|
||||||
}
|
}
|
||||||
@ -1038,30 +1131,34 @@ private object MyPeripheralManagerHostAPICodec : StandardMessageCodec() {
|
|||||||
}
|
}
|
||||||
override fun writeValue(stream: ByteArrayOutputStream, value: Any?) {
|
override fun writeValue(stream: ByteArrayOutputStream, value: Any?) {
|
||||||
when (value) {
|
when (value) {
|
||||||
is MyAdvertisementArgs -> {
|
is MyAdvertiseDataArgs -> {
|
||||||
stream.write(128)
|
stream.write(128)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
is MyManufacturerSpecificDataArgs -> {
|
is MyAdvertiseSettingsArgs -> {
|
||||||
stream.write(129)
|
stream.write(129)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
is MyMutableGATTCharacteristicArgs -> {
|
is MyManufacturerSpecificDataArgs -> {
|
||||||
stream.write(130)
|
stream.write(130)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
is MyMutableGATTDescriptorArgs -> {
|
is MyMutableGATTCharacteristicArgs -> {
|
||||||
stream.write(131)
|
stream.write(131)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
is MyMutableGATTServiceArgs -> {
|
is MyMutableGATTDescriptorArgs -> {
|
||||||
stream.write(132)
|
stream.write(132)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
is MyPeripheralManagerArgs -> {
|
is MyMutableGATTServiceArgs -> {
|
||||||
stream.write(133)
|
stream.write(133)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
|
is MyPeripheralManagerArgs -> {
|
||||||
|
stream.write(134)
|
||||||
|
writeValue(stream, value.toList())
|
||||||
|
}
|
||||||
else -> super.writeValue(stream, value)
|
else -> super.writeValue(stream, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1072,13 +1169,14 @@ interface MyPeripheralManagerHostAPI {
|
|||||||
fun initialize(): MyPeripheralManagerArgs
|
fun initialize(): MyPeripheralManagerArgs
|
||||||
fun getState(): MyBluetoothLowEnergyStateArgs
|
fun getState(): MyBluetoothLowEnergyStateArgs
|
||||||
fun authorize(callback: (Result<Boolean>) -> Unit)
|
fun authorize(callback: (Result<Boolean>) -> Unit)
|
||||||
fun showAppSettings(callback: (Result<Unit>) -> Unit)
|
fun showAppSettings()
|
||||||
|
fun setName(nameArgs: String, callback: (Result<String?>) -> Unit)
|
||||||
fun openGATTServer()
|
fun openGATTServer()
|
||||||
fun closeGATTServer()
|
fun closeGATTServer()
|
||||||
fun addService(serviceArgs: MyMutableGATTServiceArgs, callback: (Result<Unit>) -> Unit)
|
fun addService(serviceArgs: MyMutableGATTServiceArgs, callback: (Result<Unit>) -> Unit)
|
||||||
fun removeService(hashCodeArgs: Long)
|
fun removeService(hashCodeArgs: Long)
|
||||||
fun removeAllServices()
|
fun removeAllServices()
|
||||||
fun startAdvertising(advertisementArgs: MyAdvertisementArgs, callback: (Result<Unit>) -> Unit)
|
fun startAdvertising(settingsArgs: MyAdvertiseSettingsArgs, advertiseDataArgs: MyAdvertiseDataArgs, scanResponseArgs: MyAdvertiseDataArgs, callback: (Result<Unit>) -> Unit)
|
||||||
fun stopAdvertising()
|
fun stopAdvertising()
|
||||||
fun sendResponse(addressArgs: String, idArgs: Long, statusArgs: MyGATTStatusArgs, offsetArgs: Long, valueArgs: ByteArray?)
|
fun sendResponse(addressArgs: String, idArgs: Long, statusArgs: MyGATTStatusArgs, offsetArgs: Long, valueArgs: ByteArray?)
|
||||||
fun notifyCharacteristicChanged(addressArgs: String, hashCodeArgs: Long, confirmArgs: Boolean, valueArgs: ByteArray, callback: (Result<Unit>) -> Unit)
|
fun notifyCharacteristicChanged(addressArgs: String, hashCodeArgs: Long, confirmArgs: Boolean, valueArgs: ByteArray, callback: (Result<Unit>) -> Unit)
|
||||||
@ -1089,6 +1187,7 @@ interface MyPeripheralManagerHostAPI {
|
|||||||
MyPeripheralManagerHostAPICodec
|
MyPeripheralManagerHostAPICodec
|
||||||
}
|
}
|
||||||
/** Sets up an instance of `MyPeripheralManagerHostAPI` to handle messages through the `binaryMessenger`. */
|
/** Sets up an instance of `MyPeripheralManagerHostAPI` to handle messages through the `binaryMessenger`. */
|
||||||
|
@JvmOverloads
|
||||||
fun setUp(binaryMessenger: BinaryMessenger, api: MyPeripheralManagerHostAPI?, messageChannelSuffix: String = "") {
|
fun setUp(binaryMessenger: BinaryMessenger, api: MyPeripheralManagerHostAPI?, messageChannelSuffix: String = "") {
|
||||||
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
|
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
|
||||||
run {
|
run {
|
||||||
@ -1143,12 +1242,31 @@ interface MyPeripheralManagerHostAPI {
|
|||||||
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.showAppSettings$separatedMessageChannelSuffix", codec)
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.showAppSettings$separatedMessageChannelSuffix", codec)
|
||||||
if (api != null) {
|
if (api != null) {
|
||||||
channel.setMessageHandler { _, reply ->
|
channel.setMessageHandler { _, reply ->
|
||||||
api.showAppSettings() { result: Result<Unit> ->
|
val wrapped: List<Any?> = try {
|
||||||
|
api.showAppSettings()
|
||||||
|
listOf<Any?>(null)
|
||||||
|
} catch (exception: Throwable) {
|
||||||
|
wrapError(exception)
|
||||||
|
}
|
||||||
|
reply.reply(wrapped)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channel.setMessageHandler(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
run {
|
||||||
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.setName$separatedMessageChannelSuffix", codec)
|
||||||
|
if (api != null) {
|
||||||
|
channel.setMessageHandler { message, reply ->
|
||||||
|
val args = message as List<Any?>
|
||||||
|
val nameArgsArg = args[0] as String
|
||||||
|
api.setName(nameArgsArg) { result: Result<String?> ->
|
||||||
val error = result.exceptionOrNull()
|
val error = result.exceptionOrNull()
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
reply.reply(wrapError(error))
|
reply.reply(wrapError(error))
|
||||||
} else {
|
} else {
|
||||||
reply.reply(wrapResult(null))
|
val data = result.getOrNull()
|
||||||
|
reply.reply(wrapResult(data))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1246,8 +1364,10 @@ interface MyPeripheralManagerHostAPI {
|
|||||||
if (api != null) {
|
if (api != null) {
|
||||||
channel.setMessageHandler { message, reply ->
|
channel.setMessageHandler { message, reply ->
|
||||||
val args = message as List<Any?>
|
val args = message as List<Any?>
|
||||||
val advertisementArgsArg = args[0] as MyAdvertisementArgs
|
val settingsArgsArg = args[0] as MyAdvertiseSettingsArgs
|
||||||
api.startAdvertising(advertisementArgsArg) { result: Result<Unit> ->
|
val advertiseDataArgsArg = args[1] as MyAdvertiseDataArgs
|
||||||
|
val scanResponseArgsArg = args[2] as MyAdvertiseDataArgs
|
||||||
|
api.startAdvertising(settingsArgsArg, advertiseDataArgsArg, scanResponseArgsArg) { result: Result<Unit> ->
|
||||||
val error = result.exceptionOrNull()
|
val error = result.exceptionOrNull()
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
reply.reply(wrapError(error))
|
reply.reply(wrapError(error))
|
||||||
|
@ -8,6 +8,7 @@ import android.bluetooth.BluetoothGattDescriptor
|
|||||||
import android.bluetooth.BluetoothGattService
|
import android.bluetooth.BluetoothGattService
|
||||||
import android.bluetooth.BluetoothProfile
|
import android.bluetooth.BluetoothProfile
|
||||||
import android.bluetooth.le.AdvertiseData
|
import android.bluetooth.le.AdvertiseData
|
||||||
|
import android.bluetooth.le.AdvertiseSettings
|
||||||
import android.bluetooth.le.ScanResult
|
import android.bluetooth.le.ScanResult
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.ParcelUuid
|
import android.os.ParcelUuid
|
||||||
@ -15,6 +16,23 @@ import android.util.SparseArray
|
|||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
//region ToObject
|
//region ToObject
|
||||||
|
fun MyAdvertiseModeArgs.toAdvertiseMode(): Int {
|
||||||
|
return when (this) {
|
||||||
|
MyAdvertiseModeArgs.LOW_POWER -> AdvertiseSettings.ADVERTISE_MODE_LOW_POWER
|
||||||
|
MyAdvertiseModeArgs.BALANCED -> AdvertiseSettings.ADVERTISE_MODE_BALANCED
|
||||||
|
MyAdvertiseModeArgs.LOW_LATENCY -> AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun MyTXPowerLevelArgs.toTXPowerLevel(): Int {
|
||||||
|
return when (this) {
|
||||||
|
MyTXPowerLevelArgs.ULTRA_LOW -> AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW
|
||||||
|
MyTXPowerLevelArgs.LOW -> AdvertiseSettings.ADVERTISE_TX_POWER_LOW
|
||||||
|
MyTXPowerLevelArgs.MEDIUM -> AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM
|
||||||
|
MyTXPowerLevelArgs.HIGH -> AdvertiseSettings.ADVERTISE_TX_POWER_HIGH
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun MyGATTCharacteristicWriteTypeArgs.toType(): Int {
|
fun MyGATTCharacteristicWriteTypeArgs.toType(): Int {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
MyGATTCharacteristicWriteTypeArgs.WITH_RESPONSE -> BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT
|
MyGATTCharacteristicWriteTypeArgs.WITH_RESPONSE -> BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT
|
||||||
@ -39,31 +57,56 @@ fun MyGATTStatusArgs.toStatus(): Int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun MyAdvertisementArgs.toAdvertiseData(): AdvertiseData {
|
fun MyAdvertiseSettingsArgs.toAdvertiseSettings(): AdvertiseSettings {
|
||||||
val advertiseDataBuilder = AdvertiseData.Builder()
|
val builder = AdvertiseSettings.Builder()
|
||||||
|
val modeArgs = this.modeArgs
|
||||||
|
if (modeArgs != null) {
|
||||||
|
val mode = modeArgs.toAdvertiseMode()
|
||||||
|
builder.setAdvertiseMode(mode)
|
||||||
|
}
|
||||||
|
val connectableArgs = this.connectableArgs
|
||||||
|
if (connectableArgs != null) {
|
||||||
|
builder.setConnectable(connectableArgs)
|
||||||
|
}
|
||||||
|
val timeoutArgs = this.timeoutArgs
|
||||||
|
if (timeoutArgs != null) {
|
||||||
|
val timeout = timeoutArgs.toInt()
|
||||||
|
builder.setTimeout(timeout)
|
||||||
|
}
|
||||||
|
val txPowerLevelArgs = this.txPowerLevelArgs
|
||||||
|
if (txPowerLevelArgs != null) {
|
||||||
|
val txPowerLevel = txPowerLevelArgs.toTXPowerLevel()
|
||||||
|
builder.setTxPowerLevel(txPowerLevel)
|
||||||
|
}
|
||||||
|
return builder.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun MyAdvertiseDataArgs.toAdvertiseData(): AdvertiseData {
|
||||||
|
val builder = AdvertiseData.Builder()
|
||||||
|
val includeDeviceNameArgs = this.includeDeviceNameArgs
|
||||||
|
if (includeDeviceNameArgs != null) {
|
||||||
|
builder.setIncludeDeviceName(includeDeviceNameArgs)
|
||||||
|
}
|
||||||
|
val includeTXPowerLevelArgs = this.includeTXPowerLevelArgs
|
||||||
|
if (includeTXPowerLevelArgs != null) {
|
||||||
|
builder.setIncludeTxPowerLevel(includeTXPowerLevelArgs)
|
||||||
|
}
|
||||||
for (serviceUuidArgs in serviceUUIDsArgs) {
|
for (serviceUuidArgs in serviceUUIDsArgs) {
|
||||||
val serviceUUID = ParcelUuid.fromString(serviceUuidArgs)
|
val serviceUUID = ParcelUuid.fromString(serviceUuidArgs)
|
||||||
advertiseDataBuilder.addServiceUuid(serviceUUID)
|
builder.addServiceUuid(serviceUUID)
|
||||||
}
|
}
|
||||||
for (entry in serviceDataArgs) {
|
for (entry in serviceDataArgs) {
|
||||||
val serviceDataUUID = ParcelUuid.fromString(entry.key as String)
|
val serviceDataUUID = ParcelUuid.fromString(entry.key as String)
|
||||||
val serviceData = entry.value as ByteArray
|
val serviceData = entry.value as ByteArray
|
||||||
advertiseDataBuilder.addServiceData(serviceDataUUID, serviceData)
|
builder.addServiceData(serviceDataUUID, serviceData)
|
||||||
}
|
}
|
||||||
for (args in manufacturerSpecificDataArgs) {
|
for (args in manufacturerSpecificDataArgs) {
|
||||||
val itemArgs = args as MyManufacturerSpecificDataArgs
|
val itemArgs = args as MyManufacturerSpecificDataArgs
|
||||||
val manufacturerId = itemArgs.idArgs.toInt()
|
val manufacturerId = itemArgs.idArgs.toInt()
|
||||||
val manufacturerSpecificData = itemArgs.dataArgs
|
val manufacturerSpecificData = itemArgs.dataArgs
|
||||||
advertiseDataBuilder.addManufacturerData(manufacturerId, manufacturerSpecificData)
|
builder.addManufacturerData(manufacturerId, manufacturerSpecificData)
|
||||||
}
|
}
|
||||||
return advertiseDataBuilder.build()
|
return builder.build()
|
||||||
}
|
|
||||||
|
|
||||||
fun MyAdvertisementArgs.toScanResponse(): AdvertiseData {
|
|
||||||
val advertiseDataBuilder = AdvertiseData.Builder()
|
|
||||||
val includeDeviceName = nameArgs != null
|
|
||||||
advertiseDataBuilder.setIncludeDeviceName(includeDeviceName)
|
|
||||||
return advertiseDataBuilder.build()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun MyMutableGATTDescriptorArgs.toDescriptor(): BluetoothGattDescriptor {
|
fun MyMutableGATTDescriptorArgs.toDescriptor(): BluetoothGattDescriptor {
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
package dev.hebei.bluetooth_low_energy_android
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import io.flutter.plugin.common.PluginRegistry
|
|
||||||
|
|
||||||
class MyActivityResultListener(manager: MyBluetoothLowEnergyManager) : PluginRegistry.ActivityResultListener {
|
|
||||||
private val mManager: MyBluetoothLowEnergyManager
|
|
||||||
|
|
||||||
init {
|
|
||||||
mManager = manager
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
|
|
||||||
return mManager.onActivityResult(requestCode, resultCode, data)
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,17 +12,16 @@ import io.flutter.plugin.common.PluginRegistry
|
|||||||
abstract class MyBluetoothLowEnergyManager(val context: Context) {
|
abstract class MyBluetoothLowEnergyManager(val context: Context) {
|
||||||
companion object {
|
companion object {
|
||||||
const val AUTHORIZE_CODE = 0x00
|
const val AUTHORIZE_CODE = 0x00
|
||||||
const val SHOW_APP_SETTINGS_CODE = 0x01
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mBroadcastReceiver: BroadcastReceiver by lazy { MyBroadcastReceiver(this) }
|
private val mBroadcastReceiver: BroadcastReceiver by lazy { MyBroadcastReceiver(this) }
|
||||||
private val mRequestPermissionsResultListener: PluginRegistry.RequestPermissionsResultListener by lazy { MyRequestPermissionResultListener(this) }
|
private val mRequestPermissionsResultListener: PluginRegistry.RequestPermissionsResultListener by lazy { MyRequestPermissionResultListener(this) }
|
||||||
private val mActivityResultListener: PluginRegistry.ActivityResultListener by lazy { MyActivityResultListener(this) }
|
|
||||||
|
|
||||||
private lateinit var mBinding: ActivityPluginBinding
|
private lateinit var mBinding: ActivityPluginBinding
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val filter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
|
val filter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
|
||||||
|
filter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED)
|
||||||
context.registerReceiver(mBroadcastReceiver, filter)
|
context.registerReceiver(mBroadcastReceiver, filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,17 +29,14 @@ abstract class MyBluetoothLowEnergyManager(val context: Context) {
|
|||||||
|
|
||||||
fun onAttachedToActivity(binding: ActivityPluginBinding) {
|
fun onAttachedToActivity(binding: ActivityPluginBinding) {
|
||||||
binding.addRequestPermissionsResultListener(mRequestPermissionsResultListener)
|
binding.addRequestPermissionsResultListener(mRequestPermissionsResultListener)
|
||||||
binding.addActivityResultListener(mActivityResultListener)
|
|
||||||
mBinding = binding
|
mBinding = binding
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onDetachedFromActivity() {
|
fun onDetachedFromActivity() {
|
||||||
mBinding.removeRequestPermissionsResultListener(mRequestPermissionsResultListener)
|
mBinding.removeRequestPermissionsResultListener(mRequestPermissionsResultListener)
|
||||||
mBinding.removeActivityResultListener(mActivityResultListener)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun onReceive(context: Context, intent: Intent)
|
abstract fun onReceive(context: Context, intent: Intent)
|
||||||
abstract fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, results: IntArray): Boolean
|
abstract fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, results: IntArray): Boolean
|
||||||
abstract fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@ class MyCentralManager(context: Context, binaryMessenger: BinaryMessenger) : MyB
|
|||||||
private val mDescriptors: MutableMap<String, MutableMap<Long, BluetoothGattDescriptor>>
|
private val mDescriptors: MutableMap<String, MutableMap<Long, BluetoothGattDescriptor>>
|
||||||
|
|
||||||
private var mAuthorizeCallback: ((Result<Boolean>) -> Unit)?
|
private var mAuthorizeCallback: ((Result<Boolean>) -> Unit)?
|
||||||
private var mShowAppSettingsCallback: ((Result<Unit>) -> Unit)?
|
|
||||||
private var mStartDiscoveryCallback: ((Result<Unit>) -> Unit)?
|
private var mStartDiscoveryCallback: ((Result<Unit>) -> Unit)?
|
||||||
private val mConnectCallbacks: MutableMap<String, (Result<Unit>) -> Unit>
|
private val mConnectCallbacks: MutableMap<String, (Result<Unit>) -> Unit>
|
||||||
private val mDisconnectCallbacks: MutableMap<String, (Result<Unit>) -> Unit>
|
private val mDisconnectCallbacks: MutableMap<String, (Result<Unit>) -> Unit>
|
||||||
@ -65,7 +64,6 @@ class MyCentralManager(context: Context, binaryMessenger: BinaryMessenger) : MyB
|
|||||||
mDescriptors = mutableMapOf()
|
mDescriptors = mutableMapOf()
|
||||||
|
|
||||||
mAuthorizeCallback = null
|
mAuthorizeCallback = null
|
||||||
mShowAppSettingsCallback = null
|
|
||||||
mStartDiscoveryCallback = null
|
mStartDiscoveryCallback = null
|
||||||
mConnectCallbacks = mutableMapOf()
|
mConnectCallbacks = mutableMapOf()
|
||||||
mDisconnectCallbacks = mutableMapOf()
|
mDisconnectCallbacks = mutableMapOf()
|
||||||
@ -104,7 +102,6 @@ class MyCentralManager(context: Context, binaryMessenger: BinaryMessenger) : MyB
|
|||||||
mDescriptors.clear()
|
mDescriptors.clear()
|
||||||
|
|
||||||
mAuthorizeCallback = null
|
mAuthorizeCallback = null
|
||||||
mShowAppSettingsCallback = null
|
|
||||||
mStartDiscoveryCallback = null
|
mStartDiscoveryCallback = null
|
||||||
mConnectCallbacks.clear()
|
mConnectCallbacks.clear()
|
||||||
mDisconnectCallbacks.clear()
|
mDisconnectCallbacks.clear()
|
||||||
@ -140,16 +137,11 @@ class MyCentralManager(context: Context, binaryMessenger: BinaryMessenger) : MyB
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showAppSettings(callback: (Result<Unit>) -> Unit) {
|
override fun showAppSettings() {
|
||||||
try {
|
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
intent.data = Uri.fromParts("package", activity.packageName, null)
|
||||||
intent.data = Uri.fromParts("package", activity.packageName, null)
|
val options = ActivityOptionsCompat.makeBasic().toBundle()
|
||||||
val options = ActivityOptionsCompat.makeBasic().toBundle()
|
ActivityCompat.startActivity(activity, intent, options)
|
||||||
ActivityCompat.startActivityForResult(activity, intent, SHOW_APP_SETTINGS_CODE, options)
|
|
||||||
mShowAppSettingsCallback = callback
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
callback(Result.failure(e))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun startDiscovery(serviceUUIDsArgs: List<String>, callback: (Result<Unit>) -> Unit) {
|
override fun startDiscovery(serviceUUIDsArgs: List<String>, callback: (Result<Unit>) -> Unit) {
|
||||||
@ -355,16 +347,6 @@ class MyCentralManager(context: Context, binaryMessenger: BinaryMessenger) : MyB
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
|
|
||||||
if (requestCode != SHOW_APP_SETTINGS_CODE) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
val callback = mShowAppSettingsCallback ?: return false
|
|
||||||
mShowAppSettingsCallback = null
|
|
||||||
callback(Result.success(Unit))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun onScanSucceeded() {
|
private fun onScanSucceeded() {
|
||||||
mDiscovering = true
|
mDiscovering = true
|
||||||
val callback = mStartDiscoveryCallback ?: return
|
val callback = mStartDiscoveryCallback ?: return
|
||||||
|
@ -43,7 +43,7 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
private val mDescriptors: MutableMap<Long, BluetoothGattDescriptor>
|
private val mDescriptors: MutableMap<Long, BluetoothGattDescriptor>
|
||||||
|
|
||||||
private var mAuthorizeCallback: ((Result<Boolean>) -> Unit)?
|
private var mAuthorizeCallback: ((Result<Boolean>) -> Unit)?
|
||||||
private var mShowAppSettingsCallback: ((Result<Unit>) -> Unit)?
|
private var mSetNameCallback: ((Result<String?>) -> Unit)?
|
||||||
private var mAddServiceCallback: ((Result<Unit>) -> Unit)?
|
private var mAddServiceCallback: ((Result<Unit>) -> Unit)?
|
||||||
private var mStartAdvertisingCallback: ((Result<Unit>) -> Unit)?
|
private var mStartAdvertisingCallback: ((Result<Unit>) -> Unit)?
|
||||||
private val mNotifyCharacteristicValueChangedCallbacks: MutableMap<String, (Result<Unit>) -> Unit>
|
private val mNotifyCharacteristicValueChangedCallbacks: MutableMap<String, (Result<Unit>) -> Unit>
|
||||||
@ -64,7 +64,7 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
mDescriptors = mutableMapOf()
|
mDescriptors = mutableMapOf()
|
||||||
|
|
||||||
mAuthorizeCallback = null
|
mAuthorizeCallback = null
|
||||||
mShowAppSettingsCallback = null
|
mSetNameCallback = null
|
||||||
mAddServiceCallback = null
|
mAddServiceCallback = null
|
||||||
mStartAdvertisingCallback = null
|
mStartAdvertisingCallback = null
|
||||||
mNotifyCharacteristicValueChangedCallbacks = mutableMapOf()
|
mNotifyCharacteristicValueChangedCallbacks = mutableMapOf()
|
||||||
@ -99,7 +99,7 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
mDescriptors.clear()
|
mDescriptors.clear()
|
||||||
|
|
||||||
mAuthorizeCallback = null
|
mAuthorizeCallback = null
|
||||||
mShowAppSettingsCallback = null
|
mSetNameCallback = null
|
||||||
mAddServiceCallback = null
|
mAddServiceCallback = null
|
||||||
mStartAdvertisingCallback = null
|
mStartAdvertisingCallback = null
|
||||||
mNotifyCharacteristicValueChangedCallbacks.clear()
|
mNotifyCharacteristicValueChangedCallbacks.clear()
|
||||||
@ -128,13 +128,20 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showAppSettings(callback: (Result<Unit>) -> Unit) {
|
override fun showAppSettings() {
|
||||||
|
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||||
|
intent.data = Uri.fromParts("package", activity.packageName, null)
|
||||||
|
val options = ActivityOptionsCompat.makeBasic().toBundle()
|
||||||
|
ActivityCompat.startActivity(activity, intent, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setName(nameArgs: String, callback: (Result<String?>) -> Unit) {
|
||||||
try {
|
try {
|
||||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
val setting = adapter.setName(nameArgs)
|
||||||
intent.data = Uri.fromParts("package", activity.packageName, null)
|
if (!setting) {
|
||||||
val options = ActivityOptionsCompat.makeBasic().toBundle()
|
throw IllegalStateException()
|
||||||
ActivityCompat.startActivityForResult(activity, intent, SHOW_APP_SETTINGS_CODE, options)
|
}
|
||||||
mShowAppSettingsCallback = callback
|
mSetNameCallback = callback
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
callback(Result.failure(e))
|
callback(Result.failure(e))
|
||||||
}
|
}
|
||||||
@ -183,17 +190,11 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
mDescriptorsArgs.clear()
|
mDescriptorsArgs.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun startAdvertising(advertisementArgs: MyAdvertisementArgs, callback: (Result<Unit>) -> Unit) {
|
override fun startAdvertising(settingsArgs: MyAdvertiseSettingsArgs, advertiseDataArgs: MyAdvertiseDataArgs, scanResponseArgs: MyAdvertiseDataArgs, callback: (Result<Unit>) -> Unit) {
|
||||||
try {
|
try {
|
||||||
val settings = AdvertiseSettings.Builder().setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED).setConnectable(true).build()
|
val settings = settingsArgs.toAdvertiseSettings()
|
||||||
// TODO: There is an issue that Android will use the cached name before setName takes effect.
|
val advertiseData = advertiseDataArgs.toAdvertiseData()
|
||||||
// see https://stackoverflow.com/questions/8377558/change-the-android-bluetooth-device-name
|
val scanResponse = scanResponseArgs.toAdvertiseData()
|
||||||
val nameArgs = advertisementArgs.nameArgs
|
|
||||||
if (nameArgs != null) {
|
|
||||||
adapter.name = nameArgs
|
|
||||||
}
|
|
||||||
val advertiseData = advertisementArgs.toAdvertiseData()
|
|
||||||
val scanResponse = advertisementArgs.toScanResponse()
|
|
||||||
advertiser.startAdvertising(settings, advertiseData, scanResponse, mAdvertiseCallback)
|
advertiser.startAdvertising(settings, advertiseData, scanResponse, mAdvertiseCallback)
|
||||||
mStartAdvertisingCallback = callback
|
mStartAdvertisingCallback = callback
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
@ -238,12 +239,20 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
if (intent.action != BluetoothAdapter.ACTION_STATE_CHANGED) {
|
when (intent.action) {
|
||||||
return
|
BluetoothAdapter.ACTION_STATE_CHANGED -> {
|
||||||
|
val state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_OFF)
|
||||||
|
val stateArgs = state.toBluetoothLowEnergyStateArgs()
|
||||||
|
mAPI.onStateChanged(stateArgs) {}
|
||||||
|
}
|
||||||
|
BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED -> {
|
||||||
|
val callback = mSetNameCallback ?: return
|
||||||
|
mSetNameCallback = null
|
||||||
|
val nameArgs = intent.getStringExtra(BluetoothAdapter.EXTRA_LOCAL_NAME)
|
||||||
|
callback(Result.success(nameArgs))
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
}
|
}
|
||||||
val state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_OFF)
|
|
||||||
val stateArgs = state.toBluetoothLowEnergyStateArgs()
|
|
||||||
mAPI.onStateChanged(stateArgs) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, results: IntArray): Boolean {
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, results: IntArray): Boolean {
|
||||||
@ -257,16 +266,6 @@ class MyPeripheralManager(context: Context, binaryMessenger: BinaryMessenger) :
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
|
|
||||||
if (requestCode != SHOW_APP_SETTINGS_CODE) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
val callback = mShowAppSettingsCallback ?: return false
|
|
||||||
mShowAppSettingsCallback = null
|
|
||||||
callback(Result.success(Unit))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
fun onServiceAdded(status: Int, service: BluetoothGattService) {
|
fun onServiceAdded(status: Int, service: BluetoothGattService) {
|
||||||
val callback = mAddServiceCallback ?: return
|
val callback = mAddServiceCallback ?: return
|
||||||
mAddServiceCallback = null
|
mAddServiceCallback = null
|
||||||
|
@ -15,7 +15,7 @@ packages:
|
|||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "6.0.0"
|
version: "6.0.2"
|
||||||
bluetooth_low_energy_platform_interface:
|
bluetooth_low_energy_platform_interface:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -198,9 +198,8 @@ extension ManufacturerSpecificDataX on ManufacturerSpecificData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension AdvertisementX on Advertisement {
|
extension AdvertisementX on Advertisement {
|
||||||
MyAdvertisementArgs toArgs() {
|
MyAdvertiseDataArgs toAdvertiseDataArgs() {
|
||||||
return MyAdvertisementArgs(
|
return MyAdvertiseDataArgs(
|
||||||
nameArgs: name,
|
|
||||||
serviceUUIDsArgs: serviceUUIDs.map((uuid) => uuid.toArgs()).toList(),
|
serviceUUIDsArgs: serviceUUIDs.map((uuid) => uuid.toArgs()).toList(),
|
||||||
serviceDataArgs: serviceData.map((uuid, data) {
|
serviceDataArgs: serviceData.map((uuid, data) {
|
||||||
final uuidArgs = uuid.toArgs();
|
final uuidArgs = uuid.toArgs();
|
||||||
@ -211,6 +210,15 @@ extension AdvertisementX on Advertisement {
|
|||||||
manufacturerSpecificData.map((data) => data.toArgs()).toList(),
|
manufacturerSpecificData.map((data) => data.toArgs()).toList(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MyAdvertiseDataArgs toScanResponseArgs() {
|
||||||
|
return MyAdvertiseDataArgs(
|
||||||
|
includeDeviceNameArgs: name != null,
|
||||||
|
serviceUUIDsArgs: [],
|
||||||
|
serviceDataArgs: {},
|
||||||
|
manufacturerSpecificDataArgs: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MutableGATTDescriptorX on MutableGATTDescriptor {
|
extension MutableGATTDescriptorX on MutableGATTDescriptor {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Autogenerated from Pigeon (v19.0.0), do not edit directly.
|
// Autogenerated from Pigeon (v19.0.2), do not edit directly.
|
||||||
// See also: https://pub.dev/packages/pigeon
|
// See also: https://pub.dev/packages/pigeon
|
||||||
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers
|
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers
|
||||||
|
|
||||||
@ -35,6 +35,19 @@ enum MyBluetoothLowEnergyStateArgs {
|
|||||||
turningOff,
|
turningOff,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum MyAdvertiseModeArgs {
|
||||||
|
lowPower,
|
||||||
|
balanced,
|
||||||
|
lowLatency,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum MyTXPowerLevelArgs {
|
||||||
|
ultraLow,
|
||||||
|
low,
|
||||||
|
medium,
|
||||||
|
high,
|
||||||
|
}
|
||||||
|
|
||||||
enum MyConnectionStateArgs {
|
enum MyConnectionStateArgs {
|
||||||
disconnected,
|
disconnected,
|
||||||
connecting,
|
connecting,
|
||||||
@ -200,6 +213,87 @@ class MyAdvertisementArgs {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MyAdvertiseSettingsArgs {
|
||||||
|
MyAdvertiseSettingsArgs({
|
||||||
|
this.modeArgs,
|
||||||
|
this.connectableArgs,
|
||||||
|
this.timeoutArgs,
|
||||||
|
this.txPowerLevelArgs,
|
||||||
|
});
|
||||||
|
|
||||||
|
MyAdvertiseModeArgs? modeArgs;
|
||||||
|
|
||||||
|
bool? connectableArgs;
|
||||||
|
|
||||||
|
int? timeoutArgs;
|
||||||
|
|
||||||
|
MyTXPowerLevelArgs? txPowerLevelArgs;
|
||||||
|
|
||||||
|
Object encode() {
|
||||||
|
return <Object?>[
|
||||||
|
modeArgs?.index,
|
||||||
|
connectableArgs,
|
||||||
|
timeoutArgs,
|
||||||
|
txPowerLevelArgs?.index,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
static MyAdvertiseSettingsArgs decode(Object result) {
|
||||||
|
result as List<Object?>;
|
||||||
|
return MyAdvertiseSettingsArgs(
|
||||||
|
modeArgs: result[0] != null
|
||||||
|
? MyAdvertiseModeArgs.values[result[0]! as int]
|
||||||
|
: null,
|
||||||
|
connectableArgs: result[1] as bool?,
|
||||||
|
timeoutArgs: result[2] as int?,
|
||||||
|
txPowerLevelArgs: result[3] != null
|
||||||
|
? MyTXPowerLevelArgs.values[result[3]! as int]
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyAdvertiseDataArgs {
|
||||||
|
MyAdvertiseDataArgs({
|
||||||
|
this.includeDeviceNameArgs,
|
||||||
|
this.includeTXPowerLevelArgs,
|
||||||
|
required this.serviceUUIDsArgs,
|
||||||
|
required this.serviceDataArgs,
|
||||||
|
required this.manufacturerSpecificDataArgs,
|
||||||
|
});
|
||||||
|
|
||||||
|
bool? includeDeviceNameArgs;
|
||||||
|
|
||||||
|
bool? includeTXPowerLevelArgs;
|
||||||
|
|
||||||
|
List<String?> serviceUUIDsArgs;
|
||||||
|
|
||||||
|
Map<String?, Uint8List?> serviceDataArgs;
|
||||||
|
|
||||||
|
List<MyManufacturerSpecificDataArgs?> manufacturerSpecificDataArgs;
|
||||||
|
|
||||||
|
Object encode() {
|
||||||
|
return <Object?>[
|
||||||
|
includeDeviceNameArgs,
|
||||||
|
includeTXPowerLevelArgs,
|
||||||
|
serviceUUIDsArgs,
|
||||||
|
serviceDataArgs,
|
||||||
|
manufacturerSpecificDataArgs,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
static MyAdvertiseDataArgs decode(Object result) {
|
||||||
|
result as List<Object?>;
|
||||||
|
return MyAdvertiseDataArgs(
|
||||||
|
includeDeviceNameArgs: result[0] as bool?,
|
||||||
|
includeTXPowerLevelArgs: result[1] as bool?,
|
||||||
|
serviceUUIDsArgs: (result[2] as List<Object?>?)!.cast<String?>(),
|
||||||
|
serviceDataArgs: (result[3] as Map<Object?, Object?>?)!.cast<String?, Uint8List?>(),
|
||||||
|
manufacturerSpecificDataArgs: (result[4] as List<Object?>?)!.cast<MyManufacturerSpecificDataArgs?>(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class MyCentralArgs {
|
class MyCentralArgs {
|
||||||
MyCentralArgs({
|
MyCentralArgs({
|
||||||
required this.addressArgs,
|
required this.addressArgs,
|
||||||
@ -1142,24 +1236,27 @@ class _MyPeripheralManagerHostAPICodec extends StandardMessageCodec {
|
|||||||
const _MyPeripheralManagerHostAPICodec();
|
const _MyPeripheralManagerHostAPICodec();
|
||||||
@override
|
@override
|
||||||
void writeValue(WriteBuffer buffer, Object? value) {
|
void writeValue(WriteBuffer buffer, Object? value) {
|
||||||
if (value is MyAdvertisementArgs) {
|
if (value is MyAdvertiseDataArgs) {
|
||||||
buffer.putUint8(128);
|
buffer.putUint8(128);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else if (value is MyManufacturerSpecificDataArgs) {
|
} else if (value is MyAdvertiseSettingsArgs) {
|
||||||
buffer.putUint8(129);
|
buffer.putUint8(129);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else if (value is MyMutableGATTCharacteristicArgs) {
|
} else if (value is MyManufacturerSpecificDataArgs) {
|
||||||
buffer.putUint8(130);
|
buffer.putUint8(130);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else if (value is MyMutableGATTDescriptorArgs) {
|
} else if (value is MyMutableGATTCharacteristicArgs) {
|
||||||
buffer.putUint8(131);
|
buffer.putUint8(131);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else if (value is MyMutableGATTServiceArgs) {
|
} else if (value is MyMutableGATTDescriptorArgs) {
|
||||||
buffer.putUint8(132);
|
buffer.putUint8(132);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else if (value is MyPeripheralManagerArgs) {
|
} else if (value is MyMutableGATTServiceArgs) {
|
||||||
buffer.putUint8(133);
|
buffer.putUint8(133);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
|
} else if (value is MyPeripheralManagerArgs) {
|
||||||
|
buffer.putUint8(134);
|
||||||
|
writeValue(buffer, value.encode());
|
||||||
} else {
|
} else {
|
||||||
super.writeValue(buffer, value);
|
super.writeValue(buffer, value);
|
||||||
}
|
}
|
||||||
@ -1169,16 +1266,18 @@ class _MyPeripheralManagerHostAPICodec extends StandardMessageCodec {
|
|||||||
Object? readValueOfType(int type, ReadBuffer buffer) {
|
Object? readValueOfType(int type, ReadBuffer buffer) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 128:
|
case 128:
|
||||||
return MyAdvertisementArgs.decode(readValue(buffer)!);
|
return MyAdvertiseDataArgs.decode(readValue(buffer)!);
|
||||||
case 129:
|
case 129:
|
||||||
return MyManufacturerSpecificDataArgs.decode(readValue(buffer)!);
|
return MyAdvertiseSettingsArgs.decode(readValue(buffer)!);
|
||||||
case 130:
|
case 130:
|
||||||
return MyMutableGATTCharacteristicArgs.decode(readValue(buffer)!);
|
return MyManufacturerSpecificDataArgs.decode(readValue(buffer)!);
|
||||||
case 131:
|
case 131:
|
||||||
return MyMutableGATTDescriptorArgs.decode(readValue(buffer)!);
|
return MyMutableGATTCharacteristicArgs.decode(readValue(buffer)!);
|
||||||
case 132:
|
case 132:
|
||||||
return MyMutableGATTServiceArgs.decode(readValue(buffer)!);
|
return MyMutableGATTDescriptorArgs.decode(readValue(buffer)!);
|
||||||
case 133:
|
case 133:
|
||||||
|
return MyMutableGATTServiceArgs.decode(readValue(buffer)!);
|
||||||
|
case 134:
|
||||||
return MyPeripheralManagerArgs.decode(readValue(buffer)!);
|
return MyPeripheralManagerArgs.decode(readValue(buffer)!);
|
||||||
default:
|
default:
|
||||||
return super.readValueOfType(type, buffer);
|
return super.readValueOfType(type, buffer);
|
||||||
@ -1302,6 +1401,28 @@ class MyPeripheralManagerHostAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<String?> setName(String nameArgs) async {
|
||||||
|
final String __pigeon_channelName = 'dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.setName$__pigeon_messageChannelSuffix';
|
||||||
|
final BasicMessageChannel<Object?> __pigeon_channel = BasicMessageChannel<Object?>(
|
||||||
|
__pigeon_channelName,
|
||||||
|
pigeonChannelCodec,
|
||||||
|
binaryMessenger: __pigeon_binaryMessenger,
|
||||||
|
);
|
||||||
|
final List<Object?>? __pigeon_replyList =
|
||||||
|
await __pigeon_channel.send(<Object?>[nameArgs]) as List<Object?>?;
|
||||||
|
if (__pigeon_replyList == null) {
|
||||||
|
throw _createConnectionError(__pigeon_channelName);
|
||||||
|
} else if (__pigeon_replyList.length > 1) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: __pigeon_replyList[0]! as String,
|
||||||
|
message: __pigeon_replyList[1] as String?,
|
||||||
|
details: __pigeon_replyList[2],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return (__pigeon_replyList[0] as String?);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> openGATTServer() async {
|
Future<void> openGATTServer() async {
|
||||||
final String __pigeon_channelName = 'dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.openGATTServer$__pigeon_messageChannelSuffix';
|
final String __pigeon_channelName = 'dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.openGATTServer$__pigeon_messageChannelSuffix';
|
||||||
final BasicMessageChannel<Object?> __pigeon_channel = BasicMessageChannel<Object?>(
|
final BasicMessageChannel<Object?> __pigeon_channel = BasicMessageChannel<Object?>(
|
||||||
@ -1412,7 +1533,7 @@ class MyPeripheralManagerHostAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> startAdvertising(MyAdvertisementArgs advertisementArgs) async {
|
Future<void> startAdvertising(MyAdvertiseSettingsArgs settingsArgs, MyAdvertiseDataArgs advertiseDataArgs, MyAdvertiseDataArgs scanResponseArgs) async {
|
||||||
final String __pigeon_channelName = 'dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.startAdvertising$__pigeon_messageChannelSuffix';
|
final String __pigeon_channelName = 'dev.flutter.pigeon.bluetooth_low_energy_android.MyPeripheralManagerHostAPI.startAdvertising$__pigeon_messageChannelSuffix';
|
||||||
final BasicMessageChannel<Object?> __pigeon_channel = BasicMessageChannel<Object?>(
|
final BasicMessageChannel<Object?> __pigeon_channel = BasicMessageChannel<Object?>(
|
||||||
__pigeon_channelName,
|
__pigeon_channelName,
|
||||||
@ -1420,7 +1541,7 @@ class MyPeripheralManagerHostAPI {
|
|||||||
binaryMessenger: __pigeon_binaryMessenger,
|
binaryMessenger: __pigeon_binaryMessenger,
|
||||||
);
|
);
|
||||||
final List<Object?>? __pigeon_replyList =
|
final List<Object?>? __pigeon_replyList =
|
||||||
await __pigeon_channel.send(<Object?>[advertisementArgs]) as List<Object?>?;
|
await __pigeon_channel.send(<Object?>[settingsArgs, advertiseDataArgs, scanResponseArgs]) as List<Object?>?;
|
||||||
if (__pigeon_replyList == null) {
|
if (__pigeon_replyList == null) {
|
||||||
throw _createConnectionError(__pigeon_channelName);
|
throw _createConnectionError(__pigeon_channelName);
|
||||||
} else if (__pigeon_replyList.length > 1) {
|
} else if (__pigeon_replyList.length > 1) {
|
||||||
|
@ -156,9 +156,28 @@ final class MyPeripheralManager extends PlatformPeripheralManager
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> startAdvertising(Advertisement advertisement) async {
|
Future<void> startAdvertising(Advertisement advertisement) async {
|
||||||
final advertisementArgs = advertisement.toArgs();
|
final nameArgs = advertisement.name;
|
||||||
logger.info('startAdvertising: $advertisementArgs');
|
if (nameArgs != null) {
|
||||||
await _api.startAdvertising(advertisementArgs);
|
logger.info('setName: $nameArgs');
|
||||||
|
final newNameArgs = await _api.setName(nameArgs);
|
||||||
|
if (newNameArgs != nameArgs) {
|
||||||
|
throw ArgumentError(
|
||||||
|
'Name changed, but $newNameArgs is different from $nameArgs');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final settingsArgs = MyAdvertiseSettingsArgs(
|
||||||
|
modeArgs: MyAdvertiseModeArgs.balanced,
|
||||||
|
connectableArgs: true,
|
||||||
|
);
|
||||||
|
final advertiseDataArgs = advertisement.toAdvertiseDataArgs();
|
||||||
|
final scanResponseArgs = advertisement.toScanResponseArgs();
|
||||||
|
logger.info(
|
||||||
|
'startAdvertising: $settingsArgs, $advertiseDataArgs, $scanResponseArgs');
|
||||||
|
await _api.startAdvertising(
|
||||||
|
settingsArgs,
|
||||||
|
advertiseDataArgs,
|
||||||
|
scanResponseArgs,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -24,6 +24,19 @@ enum MyBluetoothLowEnergyStateArgs {
|
|||||||
turningOff,
|
turningOff,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum MyAdvertiseModeArgs {
|
||||||
|
lowPower,
|
||||||
|
balanced,
|
||||||
|
lowLatency,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum MyTXPowerLevelArgs {
|
||||||
|
ultraLow,
|
||||||
|
low,
|
||||||
|
medium,
|
||||||
|
high,
|
||||||
|
}
|
||||||
|
|
||||||
enum MyConnectionStateArgs {
|
enum MyConnectionStateArgs {
|
||||||
disconnected,
|
disconnected,
|
||||||
connecting,
|
connecting,
|
||||||
@ -110,6 +123,36 @@ class MyAdvertisementArgs {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MyAdvertiseSettingsArgs {
|
||||||
|
final MyAdvertiseModeArgs? modeArgs;
|
||||||
|
final bool? connectableArgs;
|
||||||
|
final int? timeoutArgs;
|
||||||
|
final MyTXPowerLevelArgs? txPowerLevelArgs;
|
||||||
|
|
||||||
|
MyAdvertiseSettingsArgs(
|
||||||
|
this.modeArgs,
|
||||||
|
this.connectableArgs,
|
||||||
|
this.timeoutArgs,
|
||||||
|
this.txPowerLevelArgs,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyAdvertiseDataArgs {
|
||||||
|
final bool? includeDeviceNameArgs;
|
||||||
|
final bool? includeTXPowerLevelArgs;
|
||||||
|
final List<String?> serviceUUIDsArgs;
|
||||||
|
final Map<String?, Uint8List?> serviceDataArgs;
|
||||||
|
final List<MyManufacturerSpecificDataArgs?> manufacturerSpecificDataArgs;
|
||||||
|
|
||||||
|
MyAdvertiseDataArgs(
|
||||||
|
this.includeDeviceNameArgs,
|
||||||
|
this.includeTXPowerLevelArgs,
|
||||||
|
this.serviceUUIDsArgs,
|
||||||
|
this.serviceDataArgs,
|
||||||
|
this.manufacturerSpecificDataArgs,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
class MyCentralArgs {
|
class MyCentralArgs {
|
||||||
final String addressArgs;
|
final String addressArgs;
|
||||||
|
|
||||||
@ -212,7 +255,6 @@ abstract class MyCentralManagerHostAPI {
|
|||||||
MyBluetoothLowEnergyStateArgs getState();
|
MyBluetoothLowEnergyStateArgs getState();
|
||||||
@async
|
@async
|
||||||
bool authorize();
|
bool authorize();
|
||||||
@async
|
|
||||||
void showAppSettings();
|
void showAppSettings();
|
||||||
@async
|
@async
|
||||||
void startDiscovery(List<String> serviceUUIDsArgs);
|
void startDiscovery(List<String> serviceUUIDsArgs);
|
||||||
@ -278,8 +320,9 @@ abstract class MyPeripheralManagerHostAPI {
|
|||||||
MyBluetoothLowEnergyStateArgs getState();
|
MyBluetoothLowEnergyStateArgs getState();
|
||||||
@async
|
@async
|
||||||
bool authorize();
|
bool authorize();
|
||||||
@async
|
|
||||||
void showAppSettings();
|
void showAppSettings();
|
||||||
|
@async
|
||||||
|
String? setName(String nameArgs);
|
||||||
void openGATTServer();
|
void openGATTServer();
|
||||||
void closeGATTServer();
|
void closeGATTServer();
|
||||||
@async
|
@async
|
||||||
@ -287,7 +330,11 @@ abstract class MyPeripheralManagerHostAPI {
|
|||||||
void removeService(int hashCodeArgs);
|
void removeService(int hashCodeArgs);
|
||||||
void removeAllServices();
|
void removeAllServices();
|
||||||
@async
|
@async
|
||||||
void startAdvertising(MyAdvertisementArgs advertisementArgs);
|
void startAdvertising(
|
||||||
|
MyAdvertiseSettingsArgs settingsArgs,
|
||||||
|
MyAdvertiseDataArgs advertiseDataArgs,
|
||||||
|
MyAdvertiseDataArgs scanResponseArgs,
|
||||||
|
);
|
||||||
void stopAdvertising();
|
void stopAdvertising();
|
||||||
void sendResponse(
|
void sendResponse(
|
||||||
String addressArgs,
|
String addressArgs,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: bluetooth_low_energy_android
|
name: bluetooth_low_energy_android
|
||||||
description: "Android implementation of the bluetooth_low_energy plugin."
|
description: "Android implementation of the bluetooth_low_energy plugin."
|
||||||
version: 6.0.0
|
version: 6.0.2
|
||||||
homepage: https://github.com/yanshouwang/bluetooth_low_energy
|
homepage: https://github.com/yanshouwang/bluetooth_low_energy
|
||||||
repository: https://github.com/yanshouwang/bluetooth_low_energy
|
repository: https://github.com/yanshouwang/bluetooth_low_energy
|
||||||
issue_tracker: https://github.com/yanshouwang/bluetooth_low_energy/issues
|
issue_tracker: https://github.com/yanshouwang/bluetooth_low_energy/issues
|
||||||
|
Reference in New Issue
Block a user