Implement isScanning api (#188)
* Implement isScanning api * Improve IOS scanning api * Update Readme and Changelog
This commit is contained in:
@@ -36,6 +36,7 @@ class SafeScanner(private val bluetoothManager: BluetoothManager) {
|
||||
private val handler = Handler(Looper.myLooper()!!)
|
||||
private val startTimes = LinkedList<Long>()
|
||||
private var awaitingScan = false
|
||||
private var isScanning = false
|
||||
|
||||
fun startScan(filters: List<ScanFilter>, settings: ScanSettings, callback: ScanCallback) {
|
||||
val now = System.currentTimeMillis()
|
||||
@@ -52,7 +53,7 @@ class SafeScanner(private val bluetoothManager: BluetoothManager) {
|
||||
}
|
||||
|
||||
awaitingScan = true
|
||||
val delay = startTimes.first + EXCESSIVE_SCANNING_PERIOD_MS - now + 2_000
|
||||
val delay = startTimes.first() + EXCESSIVE_SCANNING_PERIOD_MS - now + 2_000
|
||||
Log.e(TAG, "startScan: too frequent, schedule auto-start after $delay ms $startTimes")
|
||||
|
||||
handler.postDelayed({
|
||||
@@ -65,8 +66,10 @@ class SafeScanner(private val bluetoothManager: BluetoothManager) {
|
||||
startTimes.addLast(now)
|
||||
try {
|
||||
bluetoothManager.adapter.bluetoothLeScanner?.startScan(filters, settings, callback)
|
||||
isScanning = true
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Failed to start Scan : $e")
|
||||
isScanning = false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,5 +78,10 @@ class SafeScanner(private val bluetoothManager: BluetoothManager) {
|
||||
awaitingScan = false
|
||||
handler.removeCallbacksAndMessages(null)
|
||||
bluetoothManager.adapter.bluetoothLeScanner?.stopScan(callback)
|
||||
isScanning = false
|
||||
}
|
||||
|
||||
fun isScanning(): Boolean {
|
||||
return isScanning || awaitingScan
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v26.0.5), do not edit directly.
|
||||
// Autogenerated from Pigeon (v26.1.0), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
|
||||
|
||||
@@ -447,6 +447,7 @@ interface UniversalBlePlatformChannel {
|
||||
fun disableBluetooth(callback: (Result<Boolean>) -> Unit)
|
||||
fun startScan(filter: UniversalScanFilter?)
|
||||
fun stopScan()
|
||||
fun isScanning(): Boolean
|
||||
fun connect(deviceId: String)
|
||||
fun disconnect(deviceId: String)
|
||||
fun setNotifiable(deviceId: String, service: String, characteristic: String, bleInputProperty: Long, callback: (Result<Unit>) -> Unit)
|
||||
@@ -557,6 +558,21 @@ interface UniversalBlePlatformChannel {
|
||||
channel.setMessageHandler(null)
|
||||
}
|
||||
}
|
||||
run {
|
||||
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.isScanning$separatedMessageChannelSuffix", codec)
|
||||
if (api != null) {
|
||||
channel.setMessageHandler { _, reply ->
|
||||
val wrapped: List<Any?> = try {
|
||||
listOf(api.isScanning())
|
||||
} catch (exception: Throwable) {
|
||||
UniversalBlePigeonUtils.wrapError(exception)
|
||||
}
|
||||
reply.reply(wrapped)
|
||||
}
|
||||
} else {
|
||||
channel.setMessageHandler(null)
|
||||
}
|
||||
}
|
||||
run {
|
||||
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.universal_ble.UniversalBlePlatformChannel.connect$separatedMessageChannelSuffix", codec)
|
||||
if (api != null) {
|
||||
|
||||
@@ -187,6 +187,10 @@ class UniversalBlePlugin : UniversalBlePlatformChannel, BluetoothGattCallback(),
|
||||
safeScanner.stopScan(scanCallback)
|
||||
}
|
||||
|
||||
override fun isScanning(): Boolean {
|
||||
return safeScanner.isScanning()
|
||||
}
|
||||
|
||||
override fun connect(deviceId: String) {
|
||||
// If already connected, send connected message,
|
||||
// if connecting, do nothing
|
||||
|
||||
Reference in New Issue
Block a user