boskokg / flutter_blue_plus Goto Github PK
View Code? Open in Web Editor NEWFlutter plugin for connecting and communicationg with Bluetooth Low Energy devices, on Android and iOS
License: Other
Flutter plugin for connecting and communicationg with Bluetooth Low Energy devices, on Android and iOS
License: Other
This is the exception I am getting when it calls the FlutterBluePlus.instance.scan(timeout:Duration(seconds:30))
Device: Samsung Galaxy Tab E SM-G973W
Android OS: 7.1.1
Flutter_Blue_Plus: 1.1.3
Flutter: 2.10.5
PlatformException(startScan, Field androidScanMode_ for i.b.a.g0 not found. Known fields are [private int i.b.a.g0.h, private i.c.b.b0$i i.b.a.g0.i, private boolean i.b.a.g0.j, private static final i.b.a.g0 i.b.a.g0.k, private static volatile i.c.b.a1 i.b.a.g0.l], java.lang.RuntimeException: Field androidScanMode_ for i.b.a.g0 not found. Known fields are [private int i.b.a.g0.h, private i.c.b.b0$i i.b.a.g0.i, private boolean i.b.a.g0.j, private static final i.b.a.g0 i.b.a.g0.k, private static volatile i.c.b.a1 i.b.a.g0.l]
For now, my project is using flutter_blue, and i see there are some improvements on flutter_blue_plus, so i want to use flutter_blue_plus instead of flutter_blue, do you think it is possible and with less code changes?
The current implementation of BluetoothDevice.connect may result in two TimeoutExceptions when the timeout parameter is not null. Try running the following code on dartpad.dev:
import 'dart:async';
Future<void> test() async {
final completer = Completer<void>();
Timer? timer;
timer = Timer(Duration(seconds: 1), () {
completer.completeError(TimeoutException('Failed to connect in time.'));
});
await Future.delayed(Duration(seconds: 2));
return completer.future;
}
void main() async {
print('Trying to catch the exception:');
try {
await test();
} catch (error) {
print(error.toString());
}
print('Usin a guarded zone:');
runZonedGuarded(
test,
(error, stackTrace) {
print(error.toString());
},
);
}
As you see, the test function throws two errors, one of which can only be catched using a guarded zone.
The following would be a better approach to handling timeouts:
import 'dart:async';
Future<void> test() async {
try {
await Future(
() async {
// connect to device
},
).timeout(const Duration(seconds: 2));
} on TimeoutException catch (_) {
// disconnect device
throw TimeoutException('Failed to connect in time.', timeout);
}
}
void main() async {
try {
await test();
} catch (_) {
print('Handling error');
}
}
( this was my solution to get it working on Android 12 and older devices. I'm open for suggestions.)
1. Go to Android Studio delete all other SDK and select to Install SDK31
(also upgrade Kotlin to 1.6.10 and all other things that it needs to upgrade)
check if you have installed sdk 31 with flutter doctor
command in the terminal
2. Create a proguard-rules.pro
file in android/app/
save it with this code:
-keepclassmembernames class com.boskokg.flutter_blue_plus.* { *; }
-keep class com.boskokg.flutter_blue_plus.** { *; }
3. Modify these gradle files:
android/app/build.gradle
(don't forget to change bundle name to yours)
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion flutter.compileSdkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "YOUR.BUNDLE.NAME" <-change this
minSdkVersion 21
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
// added things from here:
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
android/build.gradle
buildscript {
ext.kotlin_version = '1.6.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
android/gradle/wrapper/gradle-wrapper.properties
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
4. Install permission_handler plugin from pub.dev
5. add this to your main function before runApp() or wherever you want to call for permissions.
if (Platform.isAndroid) {
await Permission.locationWhenInUse.request();
await Permission.bluetooth.request();
await Permission.bluetoothScan.request();
await Permission.bluetoothConnect.request();
}
6. Add permissions to your android/app/src/main/AndroidManifest.xml
<manifest
(...)
<!-- required for API 18 - 30 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- required for API 23 - 30 -->
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- API 31+ -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
(...)
<application
(...)
<activity
(...)
android:exported="true"
Hi,
I would like use this package for my Application Android and iOS.
But how use this package, there isn't on pub.dev.
Thanks
Scenario 0
connect to some device
disconnect above device
-----> doing well
■ Scenario 1
connect to some device
terminate app
restart app
-----> we can find connected device by
-----> listening connectedDeviceStream
How can i disconnect device what found by connectedDeviceStream
not from manually connectToDevice nor connectToAdvertisingDevice ?
i already know canceling stream from connectToDevice
or connectToAdvertisingDevice take disconnection
but, connected device from connectedDeviceStream have no stream
so i can't disconenct those devices..... T_T
■ Trying
after Scenario 1, if i found already connected device
then make connection and cancel...
but can't get disconnected callback by ConnectionStateUpdate
(both stream from connection and FlutterReactiveBle.instants's connectedDeviceStream)
also can't scan that device...
In scan results, android shows real BT Mac address, while iOS don't. Seems that iOS encrypts the MAC Address and converts it to random GUUID instead.
Is it possible to get real BT Mac Address in iOS?
Thanks
I used heart rate data for mi band4, 5
"00002a37-0000-1000-8000-00805f9b34fb" this uuid can be read on iOS, but not on Android.
Android was this characteristics.properties.read = false
but iOS return true
and also bonded using the mi band official app.
what should i do to solve this problem?
this is my code :
for (blep.BluetoothCharacteristic c in _service!.characteristics) {
String uuid = "0x${c.uuid.toString().toLowerCase().substring(4, 8)}";
if (c.properties.read) {
if (c.isNotifying) {
await c.setNotifyValue(true);
}
c.read();
if (uuid == "0x2a37") {
debugPrint(
":::::::::: Heart Rate Measurement => ${c.lastValue[1]} ::::::::::");
} else if (uuid == "0x2a39") {
debugPrint(
":::::::::: Heart Rate Control Point => ${c.lastValue[1]} ::::::::::");
}
}
}
Hi
I have this scenario
Is it possible to periodically get updated RSSI value of already discovered beacon while Scan is going on? I m asking because scan timeout is 120 seconds and beacon send signals every 1 second. So logically, it will be good if the RSSI value gets updated while Scan is going on.
Thanks
Sabin
First time when i connect to device notify listener keep updating data but after closing app and opening again notify listener stop updating and keep sending empty arrays.
Whenever Bluetooth scans are performed, they are accumulating in ScanResults.
However, ScanResults is not initialized and data continues to accumulate.
How can we initialize ScanResults' data and accumulate only new data?
Hello,
I have a problem to read the proper amount of data sent by BLE peripheral. The peripheral cannot send bigger packages than 20 bytes (MTU is not negotiable). It cuts every message into 20 bytes packets. Unfortunately, I am not able to catch the first few packets, just the last one. While i subscribe to a characteristic and force it to send data, I can't find a way to catch the single packets. I met similar problem on pure Android app, but there I was able to save each packet from a characteristic and then reuse it. Here, it seems like they disappear and only the last one is used. Any ideas in this case?
I will be very grateful for any insights.
I tried to use this package with flutter_foreground_task. It can scan in Foreground service, however, when I lock the screen, the Scan result is 0.
Is it a way to solve it?
Please help me!
How can i check connecting or disconnecting device state value in dart code?
I am using StreamBuilder. But it is only returning connected, disconnected device state value.
Hi,
I am not sure whether its issue or not, but I do have got few questions
txPower
always seems to be null for my beacons when checked via AndroidThanks a lot
Hi,
i used the library and it works well.
When i add at the main file this line of code (to not turn the device) the disconnect function doesn't work.
void main() async { WidgetsFlutterBinding.ensureInitialized(); await SystemChrome.setPreferredOrientations( [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown], ); runApp(const MyApp()); }
I think, that the problem comes becouse the disconnect is a future that doesn't have the async, await state. How can i solve the problem?
EDIT: No permission reqs are actually made in my example, but it shouldn't matter because I'm not rendering anything that uses Bluetooth.
Is there a setting in flutter_blue_plus to keep it "inactive" until the moment FlutterBluePlus.instance
is requested? Could be a stupid question, but here's the story:
Android 12 has turned scan, advertise, and connect into runtime permissions. However, starting my app, whose homepage does not even touch Bluetooth, gives the same error as other issues posted:
E/AndroidRuntime(17796): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.qiquacmobile/com.example.qiquacmobile.MainActivity}: java.lang.SecurityException: Permission Denial: starting Intent { act=android.bluetooth.adapter.action.REQUEST_ENABLE cmp=com.android.settings/.bluetooth.RequestPermissionActivity } from ProcessRecord{e2d3552 17796:com.example.qiquacmobile/u0a694} (pid=17796, uid=10694) requires android.permission.BLUETOOTH_CONNECT
Various sources say you need to declare these permissions in your manifest, which I have done. They also say you need to use permission_handler to request runtime permissions. Below is how I've set it up, but spoiler alert -- same error happens before the app can even open. This makes me wonder if I am misinformed about the nature of runtime permissions. Can anyone shed light on this situation?
main.dart
void main() {
runApp(PermissionsChecker(MyApp));
}
class PermissionsChecker extends StatefulWidget {
PermissionsChecker(this.child);
final Widget child;
@override
State<PermissionsChecker> createState() => _PermissionsCheckerState();
}
class _PermissionsCheckerState extends State<PermissionsChecker> {
// permissions (must be handled on > SDK 31 (ie. Android 12))
bool permissionsGranted = false;
@override
void initState() {
super.initState();
checkForPermissions()
.then((result) => setState(() => permissionsGranted = result));
}
/// Checks that all necessary permissions are granted to the app before
Future<bool> checkForPermissions() async {
PermissionStatus locStatus = await Permission.locationWhenInUse.status;
PermissionStatus btStatus = await Permission.bluetooth.status;
PermissionStatus btScanStatus = await Permission.bluetoothScan.status;
PermissionStatus btConStatus = await Permission.bluetoothConnect.status;
return false;
}
@override
Widget build(BuildContext context) {
return (permissionsGranted) // is false
? widget.child
: Text('please grant permissions'); // expect this part to be rendered
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
// routes that need no arguments
routes: {
// ....
},
// routes that need arguments
onGenerateRoute: (settings) {
final args = settings.arguments;
switch (settings.name) {
// ... several cases
// home page
default:
return MaterialPageRoute(
settings: RouteSettings(name: r.homeRoute),
builder: (context) => HomePage();
}
},
debugShowCheckedModeBanner: false,
);
}
}
bottom chunk of AndroidManifest.xml
</application>
<!-- required for API 18 - 30 -->
<uses-permission
android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<!-- required for API 23 - 30 -->
<uses-permission-sdk-23
android:name="android.permission.ACCESS_COARSE_LOCATION"
android:maxSdkVersion="30" />
<uses-permission-sdk-23
android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="30" />
<!-- API 31+ -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
</manifest>
What is difference with original flutter_blue?
And will Paul or @boskokg continue to develop this package?
My flow was:
1、Init & scan etc
2、Connect device
3、Discover services & Characteristics etc
4、Do stuff
5、Disconnect all BT devices
6、Resume app
7、Init and scan etc
I got this exception error
PlatformException(write_characteristic_error, writeCharacteristic failed, null, null)
I used a while loop to send data as long as the device is connected, but the writing process is stopped if I navigate/push to another page, How to make the write method keep running even we change the screen?
Hi, All
I follow normal start-up code of flutter_blue as below.
MaterialApp(
// others code .......
home: StreamBuilder <BluetoothState> (
stream: FlutterBluePlus.instance.state,
initialData: BluetoothState.turningOn, // change here for testing
builder: (cont, snapshot) {
final state = snapshot.data;
if (state == BluetoothState.on) {
return FindDoorPage(state: state);
} else {
return BluetoothOffScreen(state: state);
}
})
);
But on IPhone 6 plus, it always gets the two status in debug message as below, and Page goes to BluetoothOffScreen().
flutter: BluetoothState.turningOn
....
flutter: BluetoothState.unknown
if turn off the Bluetooth and turn on again, the APP will work fine as normal.
In Android phone, the last BluetoothState result will be ON. no need turn off then on.
Does someone have same issue? Could you give me an advice?
Thanks!
--
IOS: 12.5.5
Flutter: 2.10.4
Dart : 2.16.2
macOS 12.2.1
CocoaPods version 1.10.2
FlutterBluePlus: 1.1.2
if(newState == BluetoothProfile.STATE_DISCONNECTED) {
if(!mDevices.containsKey(gatt.getDevice().getAddress())) {
gatt.close();
}
}
Moved from FlutterBlue, still having the same problem...
2A00 -- Device Name isn't showing up in the GATT. It is in there in reality and is visible on Android.
I've tried turning Bluetooth on/off and rebooting the iPhone...
IOS Log:
2022-02-03 16:29:26.178508-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:26.176052 Connecting to 8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1...
2022-02-03 16:29:26.179884-0600 Runner[1020:128813] flutter: WannaConnect
2022-02-03 16:29:26.179987-0600 Runner[1020:128813] flutter: GonnaConnect
2022-02-03 16:29:26.838047-0600 Runner[1020:128483] didConnectPeripheral
2022-02-03 16:29:26.849271-0600 Runner[1020:128813] flutter: then
2022-02-03 16:29:26.850926-0600 Runner[1020:128813] flutter: return
2022-02-03 16:29:26.851550-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:26.851442 ConnectDone
2022-02-03 16:29:27.531254-0600 Runner[1020:128483] didDiscoverServices
2022-02-03 16:29:27.531635-0600 Runner[1020:128483] Found service: E4CF7947-AD98-425B-8F0C-571F873A88FC
2022-02-03 16:29:27.531930-0600 Runner[1020:128483] Found service: 180A
2022-02-03 16:29:27.532084-0600 Runner[1020:128483] Found service: 1815
2022-02-03 16:29:27.532205-0600 Runner[1020:128483] Found service: 3A9057FB-6F8A-4D7E-AD45-62B1E4B2F4F3
2022-02-03 16:29:27.532319-0600 Runner[1020:128483] Found service: 3A9057FB-6F8A-4F7E-AE45-62BCE4B2F4F1
2022-02-03 16:29:27.532441-0600 Runner[1020:128483] Found service: 1805
2022-02-03 16:29:27.532580-0600 Runner[1020:128483] Found service: 181A
2022-02-03 16:29:27.532701-0600 Runner[1020:128483] Found service: 1828
2022-02-03 16:29:27.532822-0600 Runner[1020:128483] Found service: 1D14D6EE-FD63-4FA1-BFA4-8F47B42119F0
2022-02-03 16:29:27.708441-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:27.889213-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:27.981268-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.039130-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.340595-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.398334-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.518781-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.608596-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.728428-0600 Runner[1020:128483] didDiscoverCharacteristicsForService
2022-02-03 16:29:28.787918-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.788080-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847465-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847588-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847634-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847672-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847704-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847738-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847771-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.847975-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.848096-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.848161-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.848227-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.848286-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.907979-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:28.967715-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.087787-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.148049-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.208359-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.267973-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.328643-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.417654-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.478226-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.538169-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.598341-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.658771-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.658975-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.659059-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.659138-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.659214-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.659289-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.718429-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.718652-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.718736-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.718815-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.718891-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.807972-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.868611-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.868845-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.868938-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.869016-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.869092-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:29.928516-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.017232-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.139659-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.228282-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.288047-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.288255-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.288324-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.288386-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348139-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348353-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348421-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348484-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348547-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348610-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.348669-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.408406-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.467502-0600 Runner[1020:128483] didDiscoverDescriptorsForCharacteristic
2022-02-03 16:29:30.467844-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.467978-0600 Runner[1020:128483] service uuid:e4cf7947-ad98-425b-8f0c-571f873a88fc
2022-02-03 16:29:30.468234-0600 Runner[1020:128483] uuid: 78805e56-f8b7-4f30-a056-2ece9f4f70a9 value: (null)
2022-02-03 16:29:30.468449-0600 Runner[1020:128483] uuid: 665c1cbc-2c88-4ae1-9ccf-9dbc8a9e5440 value: (null)
2022-02-03 16:29:30.468551-0600 Runner[1020:128483] uuid: 00002ac8-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.468667-0600 Runner[1020:128483] uuid: 665c1cbc-2c88-4ae1-9ccf-9dbc8a9e5460 value: (null)
2022-02-03 16:29:30.468749-0600 Runner[1020:128483] uuid: 665c1cbc-2c88-4ae1-9ccf-9dbc8a988440 value: (null)
2022-02-03 16:29:30.468825-0600 Runner[1020:128483] uuid: 1f8783f9-06db-4982-a0ae-e78f146ec53f value: (null)
2022-02-03 16:29:30.468904-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.468968-0600 Runner[1020:128483] service uuid:0000180a-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.469070-0600 Runner[1020:128483] uuid: 00002a29-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469162-0600 Runner[1020:128483] uuid: 00002a24-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469252-0600 Runner[1020:128483] uuid: 00002a25-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469330-0600 Runner[1020:128483] uuid: 1f8783f9-06db-4982-a0ae-e78f146ec53f value: (null)
2022-02-03 16:29:30.469435-0600 Runner[1020:128483] uuid: 00002a27-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469537-0600 Runner[1020:128483] uuid: 00002a28-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469627-0600 Runner[1020:128483] uuid: 00002a23-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469729-0600 Runner[1020:128483] uuid: 00002a85-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.469801-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.469865-0600 Runner[1020:128483] service uuid:00001815-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.469962-0600 Runner[1020:128483] uuid: 00001229-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470087-0600 Runner[1020:128483] uuid: 00001230-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470209-0600 Runner[1020:128483] uuid: 00002a1c-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470338-0600 Runner[1020:128483] uuid: 00002aea-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470458-0600 Runner[1020:128483] uuid: 00002a1e-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470594-0600 Runner[1020:128483] uuid: 00002a6e-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470716-0600 Runner[1020:128483] uuid: 00002b0d-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470834-0600 Runner[1020:128483] uuid: 00002ae2-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.470973-0600 Runner[1020:128483] uuid: 00002ae9-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.471113-0600 Runner[1020:128483] uuid: 00002bbb-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.471244-0600 Runner[1020:128483] uuid: 00002ac3-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.471383-0600 Runner[1020:128483] uuid: 00002b18-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.471499-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.471563-0600 Runner[1020:128483] service uuid:3a9057fb-6f8a-4d7e-ad45-62b1e4b2f4f3
2022-02-03 16:29:30.471634-0600 Runner[1020:128483] uuid: 398f3cff-8930-4816-836e-ff05dfd6f07d value: (null)
2022-02-03 16:29:30.471713-0600 Runner[1020:128483] uuid: fecfa698-79d8-4309-812f-179398f57a20 value: (null)
2022-02-03 16:29:30.471824-0600 Runner[1020:128483] uuid: 855076b8-beb3-4606-b351-9fc468ca3a4e value: (null)
2022-02-03 16:29:30.471929-0600 Runner[1020:128483] uuid: d5b28f7a-bc9f-49e2-a077-0803b0afd8a4 value: (null)
2022-02-03 16:29:30.472006-0600 Runner[1020:128483] uuid: 29d2887c-0746-4518-988d-77469d1bd6ae value: (null)
2022-02-03 16:29:30.472079-0600 Runner[1020:128483] uuid: 07690c5c-654c-43a7-9823-01ec5edcc7fd value: (null)
2022-02-03 16:29:30.472199-0600 Runner[1020:128483] uuid: 4c8f6845-7a7e-415f-bd54-f54d8a68be53 value: (null)
2022-02-03 16:29:30.472275-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.472338-0600 Runner[1020:128483] service uuid:3a9057fb-6f8a-4f7e-ae45-62bce4b2f4f1
2022-02-03 16:29:30.472551-0600 Runner[1020:128483] uuid: 00002b86-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.472646-0600 Runner[1020:128483] uuid: 10362b61-c775-4888-9bb2-17bec8f9e1bb value: (null)
2022-02-03 16:29:30.472722-0600 Runner[1020:128483] uuid: 198bd2ca-99b8-4e27-89d3-eab7e1389a2e value: (null)
2022-02-03 16:29:30.472808-0600 Runner[1020:128483] uuid: 00001410-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.472921-0600 Runner[1020:128483] uuid: 00001411-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.473022-0600 Runner[1020:128483] uuid: 32cf6042-f9fb-49fb-839c-93db0b591233 value: (null)
2022-02-03 16:29:30.473093-0600 Runner[1020:128483] uuid: 7c8db2c8-e8bd-4221-9c78-be516cb22991 value: (null)
2022-02-03 16:29:30.473161-0600 Runner[1020:128483] uuid: 7d311226-c6fd-4a75-8abb-41404c08b67e value: (null)
2022-02-03 16:29:30.473267-0600 Runner[1020:128483] uuid: df68adc1-3c71-4e2b-a468-90dc765b07a7 value: (null)
2022-02-03 16:29:30.473347-0600 Runner[1020:128483] uuid: f35be144-5659-4cf1-86e2-fe7d1c82de20 value: (null)
2022-02-03 16:29:30.473543-0600 Runner[1020:128483] uuid: d2ac2d86-bd61-44cc-924b-2ae2ed221680 value: (null)
2022-02-03 16:29:30.473787-0600 Runner[1020:128483] uuid: 2747a34e-e277-4510-98b0-91c176d57a61 value: (null)
2022-02-03 16:29:30.473975-0600 Runner[1020:128483] uuid: 57df3786-7b57-472b-bd5a-a4bc758952ab value: (null)
2022-02-03 16:29:30.474060-0600 Runner[1020:128483] uuid: c72e32ee-e309-4f32-b83f-8ef7e7b6f4e8 value: (null)
2022-02-03 16:29:30.474138-0600 Runner[1020:128483] uuid: d709cb47-3b4c-4f66-9588-40cd0a95d14d value: (null)
2022-02-03 16:29:30.474198-0600 Runner[1020:128483] uuid: 56eb7023-0b8b-450d-89bd-3b2881b5d327 value: (null)
2022-02-03 16:29:30.474259-0600 Runner[1020:128483] uuid: 5b6487e1-8bae-4dc1-b86a-867806a9de22 value: (null)
2022-02-03 16:29:30.474314-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.474409-0600 Runner[1020:128483] service uuid:00001805-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.474494-0600 Runner[1020:128483] uuid: 00002a2b-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.474657-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.474818-0600 Runner[1020:128483] service uuid:0000181a-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.475031-0600 Runner[1020:128483] uuid: 5e1ab631-9c07-4715-9d16-c235294cd3e6 value: (null)
2022-02-03 16:29:30.475183-0600 Runner[1020:128483] uuid: 00005501-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.475263-0600 Runner[1020:128483] uuid: 00005502-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.475338-0600 Runner[1020:128483] uuid: 00005503-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.475415-0600 Runner[1020:128483] uuid: 00008500-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.475473-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.475525-0600 Runner[1020:128483] service uuid:00001828-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.475599-0600 Runner[1020:128483] uuid: 00002add-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.475674-0600 Runner[1020:128483] uuid: 00002ade-0000-1000-8000-00805f9b34fb value: (null)
2022-02-03 16:29:30.475964-0600 Runner[1020:128483] peripheral uuid:8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.476081-0600 Runner[1020:128483] service uuid:1d14d6ee-fd63-4fa1-bfa4-8f47b42119f0
2022-02-03 16:29:30.476153-0600 Runner[1020:128483] uuid: f7bf3564-fb6d-4e53-88a4-5e37e0326063 value: (null)
2022-02-03 16:29:30.559196-0600 Runner[1020:128483] didUpdateValueForCharacteristic 8FF8E2CD-E1FA-A880-0D3B-622622F2F7E1
2022-02-03 16:29:30.559457-0600 Runner[1020:128483] uuid: 00002a2b-0000-1000-8000-00805f9b34fb value: {length = 4, bytes = 0x393f0000}
2022-02-03 16:29:30.559665-0600 Runner[1020:128483] uuid: 00002a2b-0000-1000-8000-00805f9b34fb value: {length = 4, bytes = 0x393f0000}
2022-02-03 16:29:30.563945-0600 Runner[1020:128813] flutter: GATTdb Hash [57, 63, 0, 0]
2022-02-03 16:29:30.564119-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:30.564064 locallink
2022-02-03 16:29:30.564244-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:30.564224 Decoder
2022-02-03 16:29:30.564300-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:30.564284 DoReads
2022-02-03 16:29:30.565169-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:30.565148 ReadAll
2022-02-03 16:29:30.565943-0600 Runner[1020:128813] flutter: E: Couldn't find [00002A00] in 9 services
2022-02-03 16:29:30.566058-0600 Runner[1020:128813] flutter: e4cf7947-ad98-425b-8f0c-571f873a88fc
2022-02-03 16:29:30.566131-0600 Runner[1020:128813] flutter: 78805e56-f8b7-4f30-a056-2ece9f4f70a9
2022-02-03 16:29:30.566280-0600 Runner[1020:128813] flutter: 665c1cbc-2c88-4ae1-9ccf-9dbc8a9e5440
2022-02-03 16:29:30.566361-0600 Runner[1020:128813] flutter: 00002ac8-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.566420-0600 Runner[1020:128813] flutter: 665c1cbc-2c88-4ae1-9ccf-9dbc8a9e5460
2022-02-03 16:29:30.566466-0600 Runner[1020:128813] flutter: 665c1cbc-2c88-4ae1-9ccf-9dbc8a988440
2022-02-03 16:29:30.566513-0600 Runner[1020:128813] flutter: 1f8783f9-06db-4982-a0ae-e78f146ec53f
2022-02-03 16:29:30.566554-0600 Runner[1020:128813] flutter: 0000180a-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.566594-0600 Runner[1020:128813] flutter: 00002a29-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.566634-0600 Runner[1020:128813] flutter: 00002a24-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.566786-0600 Runner[1020:128813] flutter: 00002a25-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.566859-0600 Runner[1020:128813] flutter: 1f8783f9-06db-4982-a0ae-e78f146ec53f
2022-02-03 16:29:30.566916-0600 Runner[1020:128813] flutter: 00002a27-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567063-0600 Runner[1020:128813] flutter: 00002a28-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567174-0600 Runner[1020:128813] flutter: 00002a23-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567236-0600 Runner[1020:128813] flutter: 00002a85-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567324-0600 Runner[1020:128813] flutter: 00001815-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567465-0600 Runner[1020:128813] flutter: 00001229-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567535-0600 Runner[1020:128813] flutter: 00001230-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567672-0600 Runner[1020:128813] flutter: 00002a1c-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567742-0600 Runner[1020:128813] flutter: 00002aea-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567792-0600 Runner[1020:128813] flutter: 00002a1e-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567850-0600 Runner[1020:128813] flutter: 00002a6e-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567892-0600 Runner[1020:128813] flutter: 00002b0d-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.567937-0600 Runner[1020:128813] flutter: 00002ae2-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.568057-0600 Runner[1020:128813] flutter: 00002ae9-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.568126-0600 Runner[1020:128813] flutter: 00002bbb-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.568176-0600 Runner[1020:128813] flutter: 00002ac3-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.568260-0600 Runner[1020:128813] flutter: 00002b18-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.568328-0600 Runner[1020:128813] flutter: 3a9057fb-6f8a-4d7e-ad45-62b1e4b2f4f3
2022-02-03 16:29:30.568446-0600 Runner[1020:128813] flutter: 398f3cff-8930-4816-836e-ff05dfd6f07d
2022-02-03 16:29:30.568519-0600 Runner[1020:128813] flutter: fecfa698-79d8-4309-812f-179398f57a20
2022-02-03 16:29:30.568567-0600 Runner[1020:128813] flutter: 855076b8-beb3-4606-b351-9fc468ca3a4e
2022-02-03 16:29:30.568644-0600 Runner[1020:128813] flutter: d5b28f7a-bc9f-49e2-a077-0803b0afd8a4
2022-02-03 16:29:30.568705-0600 Runner[1020:128813] flutter: 29d2887c-0746-4518-988d-77469d1bd6ae
2022-02-03 16:29:30.568863-0600 Runner[1020:128813] flutter: 07690c5c-654c-43a7-9823-01ec5edcc7fd
2022-02-03 16:29:30.568911-0600 Runner[1020:128813] flutter: 4c8f6845-7a7e-415f-bd54-f54d8a68be53
2022-02-03 16:29:30.569070-0600 Runner[1020:128813] flutter: 3a9057fb-6f8a-4f7e-ae45-62bce4b2f4f1
2022-02-03 16:29:30.569141-0600 Runner[1020:128813] flutter: 00002b86-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.569234-0600 Runner[1020:128813] flutter: 10362b61-c775-4888-9bb2-17bec8f9e1bb
2022-02-03 16:29:30.569357-0600 Runner[1020:128813] flutter: 198bd2ca-99b8-4e27-89d3-eab7e1389a2e
2022-02-03 16:29:30.569439-0600 Runner[1020:128813] flutter: 00001410-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.569509-0600 Runner[1020:128813] flutter: 00001411-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.569633-0600 Runner[1020:128813] flutter: 32cf6042-f9fb-49fb-839c-93db0b591233
2022-02-03 16:29:30.569801-0600 Runner[1020:128813] flutter: 7c8db2c8-e8bd-4221-9c78-be516cb22991
2022-02-03 16:29:30.569869-0600 Runner[1020:128813] flutter: 7d311226-c6fd-4a75-8abb-41404c08b67e
2022-02-03 16:29:30.569919-0600 Runner[1020:128813] flutter: df68adc1-3c71-4e2b-a468-90dc765b07a7
2022-02-03 16:29:30.570168-0600 Runner[1020:128813] flutter: f35be144-5659-4cf1-86e2-fe7d1c82de20
2022-02-03 16:29:30.570237-0600 Runner[1020:128813] flutter: d2ac2d86-bd61-44cc-924b-2ae2ed221680
2022-02-03 16:29:30.570368-0600 Runner[1020:128813] flutter: 2747a34e-e277-4510-98b0-91c176d57a61
2022-02-03 16:29:30.570440-0600 Runner[1020:128813] flutter: 57df3786-7b57-472b-bd5a-a4bc758952ab
2022-02-03 16:29:30.570485-0600 Runner[1020:128813] flutter: c72e32ee-e309-4f32-b83f-8ef7e7b6f4e8
2022-02-03 16:29:30.570674-0600 Runner[1020:128813] flutter: d709cb47-3b4c-4f66-9588-40cd0a95d14d
2022-02-03 16:29:30.570743-0600 Runner[1020:128813] flutter: 56eb7023-0b8b-450d-89bd-3b2881b5d327
2022-02-03 16:29:30.570868-0600 Runner[1020:128813] flutter: 5b6487e1-8bae-4dc1-b86a-867806a9de22
2022-02-03 16:29:30.570932-0600 Runner[1020:128813] flutter: 00001805-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571072-0600 Runner[1020:128813] flutter: 00002a2b-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571139-0600 Runner[1020:128813] flutter: 0000181a-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571186-0600 Runner[1020:128813] flutter: 5e1ab631-9c07-4715-9d16-c235294cd3e6
2022-02-03 16:29:30.571222-0600 Runner[1020:128813] flutter: 00005501-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571256-0600 Runner[1020:128813] flutter: 00005502-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571292-0600 Runner[1020:128813] flutter: 00005503-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571325-0600 Runner[1020:128813] flutter: 00008500-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571362-0600 Runner[1020:128813] flutter: 00001828-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571394-0600 Runner[1020:128813] flutter: 00002add-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571426-0600 Runner[1020:128813] flutter: 00002ade-0000-1000-8000-00805f9b34fb
2022-02-03 16:29:30.571471-0600 Runner[1020:128813] flutter: 1d14d6ee-fd63-4fa1-bfa4-8f47b42119f0
2022-02-03 16:29:30.571507-0600 Runner[1020:128813] flutter: f7bf3564-fb6d-4e53-88a4-5e37e0326063
2022-02-03 16:29:30.571550-0600 Runner[1020:128813] flutter: E:--endofline--
2022-02-03 16:29:30.571611-0600 Runner[1020:128813] flutter: 2022-02-03 16:29:30.571572 ! BC NotFound:Name[2A00]
Android Log (I put a "Find 0xFF1F" in there to cause it to error):
I/flutter ( 7706): 2022-02-03 17:12:55.813531 going...
I/flutter ( 7706): CONNECT...
I/flutter ( 7706): 2022-02-03 17:12:55.815227 Connecting to 50:32:5F:C3:C6:3F...
I/flutter ( 7706): WannaConnect
I/flutter ( 7706): GonnaConnect
I/BluetoothAdapter( 7706): STATE_ON
D/BluetoothGatt( 7706): connect() - device: 50:32:5F:C3:C6:3F, auto: false
I/BluetoothAdapter( 7706): isSecureModeEnabled
D/BluetoothGatt( 7706): registerApp()
D/BluetoothGatt( 7706): registerApp() - UUID=1f15c6e1-c781-4f0b-b13c-77e4fe8d5f24
D/BluetoothGatt( 7706): onClientRegistered() - status=0 clientIf=14
D/BluetoothGatt( 7706): onClientConnectionState() - status=0 clientIf=14 device=50:32:5F:C3:C6:3F
I/flutter ( 7706): then
I/flutter ( 7706): return
I/flutter ( 7706): 2022-02-03 17:12:56.081445 ConnectDone
I/flutter ( 7706): !!FE - Connect isn't -- BluetoothDeviceState.disconnected
D/BluetoothGatt( 7706): discoverServices() - device: 50:32:5F:C3:C6:3F
D/BluetoothGatt( 7706): onConnectionUpdated() - Device=50:32:5F:C3:C6:3F interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt( 7706): onSearchComplete() = Device=50:32:5F:C3:C6:3F Status=0
I/flutter ( 7706): GATTdb Hash [115, 73, 0, 0]
I/flutter ( 7706): E: Couldn't find [0000FF12] in 11 services
I/flutter ( 7706): 00001801-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a05-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002b2a-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002b29-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00001800-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a00-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a01-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): e4cf7947-ad98-425b-8f0c-571f873a88fc
I/flutter ( 7706): 78805e56-f8b7-4f30-a056-2ece9f4f70a9
I/flutter ( 7706): 665c1cbc-2c88-4ae1-9ccf-9dbc8a9e5440
I/flutter ( 7706): 00002ac8-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 665c1cbc-2c88-4ae1-9ccf-9dbc8a9e5460
I/flutter ( 7706): 665c1cbc-2c88-4ae1-9ccf-9dbc8a988440
I/flutter ( 7706): 1f8783f9-06db-4982-a0ae-e78f146ec53f
I/flutter ( 7706): 0000180a-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a29-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a24-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a25-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 1f8783f9-06db-4982-a0ae-e78f146ec53f
I/flutter ( 7706): 00002a27-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a28-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a23-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a85-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00001815-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00001229-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00001230-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a1c-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002aea-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a1e-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a6e-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002b0d-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002ae2-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002ae9-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002bbb-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002ac3-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002b18-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 3a9057fb-6f8a-4d7e-ad45-62b1e4b2f4f3
I/flutter ( 7706): 398f3cff-8930-4816-836e-ff05dfd6f07d
I/flutter ( 7706): fecfa698-79d8-4309-812f-179398f57a20
I/flutter ( 7706): 855076b8-beb3-4606-b351-9fc468ca3a4e
I/flutter ( 7706): d5b28f7a-bc9f-49e2-a077-0803b0afd8a4
I/flutter ( 7706): 29d2887c-0746-4518-988d-77469d1bd6ae
I/flutter ( 7706): 07690c5c-654c-43a7-9823-01ec5edcc7fd
I/flutter ( 7706): 4c8f6845-7a7e-415f-bd54-f54d8a68be53
I/flutter ( 7706): 3a9057fb-6f8a-4f7e-ae45-62bce4b2f4f1
I/flutter ( 7706): 00002b86-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 10362b61-c775-4888-9bb2-17bec8f9e1bb
I/flutter ( 7706): 198bd2ca-99b8-4e27-89d3-eab7e1389a2e
I/flutter ( 7706): 00001410-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00001411-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 32cf6042-f9fb-49fb-839c-93db0b591233
I/flutter ( 7706): 7c8db2c8-e8bd-4221-9c78-be516cb22991
I/flutter ( 7706): 7d311226-c6fd-4a75-8abb-41404c08b67e
I/flutter ( 7706): df68adc1-3c71-4e2b-a468-90dc765b07a7
I/flutter ( 7706): f35be144-5659-4cf1-86e2-fe7d1c82de20
I/flutter ( 7706): d2ac2d86-bd61-44cc-924b-2ae2ed221680
I/flutter ( 7706): 2747a34e-e277-4510-98b0-91c176d57a61
I/flutter ( 7706): 57df3786-7b57-472b-bd5a-a4bc758952ab
I/flutter ( 7706): c72e32ee-e309-4f32-b83f-8ef7e7b6f4e8
I/flutter ( 7706): d709cb47-3b4c-4f66-9588-40cd0a95d14d
I/flutter ( 7706): 56eb7023-0b8b-450d-89bd-3b2881b5d327
I/flutter ( 7706): 5b6487e1-8bae-4dc1-b86a-867806a9de22
I/flutter ( 7706): 00001805-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002a2b-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 0000181a-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 5e1ab631-9c07-4715-9d16-c235294cd3e6
I/flutter ( 7706): 00005501-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00005502-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00005503-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00008500-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00001828-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002add-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 00002ade-0000-1000-8000-00805f9b34fb
I/flutter ( 7706): 1d14d6ee-fd63-4fa1-bfa4-8f47b42119f0
I/flutter ( 7706): f7bf3564-fb6d-4e53-88a4-5e37e0326063
I/flutter ( 7706): E:--endofline--
Actually this is more like a question than an issue.
What i need to do is scan for bluetooth devices, And I periodically need to update the list with new device, and for existing device, updating their corresponding rssi in the list. For this I use Timer to execute findBluetoothPeripherial(), every 40 seconds.
My Question, is there a better way of achieving this?
FlutterBluePlus flutterBlue = FlutterBluePlus.instance;
List scanResults = <ScanResult>[];
Timer? timer;
@override
void initState(){
super.initState();
findBluetoothPeripherial();
timer = Timer.periodic(Duration(seconds: 40), (Timer t) => findBluetoothPeripherial());
}
findBluetoothPeripherial(){
//check and handle permissions
flutterBlue.startScan(timeout: Duration(seconds: 20));
var subscription = flutterBlue.scanResults.listen((results) {
for (ScanResult r in results) {
print('${r.device.name} found! rssi: ${r.rssi}');
int index = scanResults.indexWhere((item) => item.device.id == r.device.id);
if(index > 0){
setState((){
scanResults[index].rssi = r.rssi;
});
}else {
setState(() {
scanResults.add(r);
});
}
}
});
// Stop scanning
flutterBlue.stopScan();
}
Another question
What is the difference between -
flutterBlue.scanResults.listen((results){
//code here
});
And
flutterBlue.scan(timeout: Duration(seconds: 20))
.distinct()
.asBroadcastStream()
.listen((results){
//code here
});
There were similar issues in the upstream repository already:
And it's still an issue. In my case a class that is provided with provider
package at the root of the widget tree is trying to keep connection with any device that can act as a gateway to a mesh network between IoT devices. It's doing this in the background and listens to the state
field to do it only when Bluetooth is turned on.
In the same time widgets that require gateway connection, so user can make any interaction with the network, are listening state
to indicate that gateway is not available, because Bluetooth is turned off (other reasons may be that it's just not around or location services are disabled). Of course it's abstracted to a single class like BluetoothNotAvailableDialog
, but this still leaves a single instance of that service class and multiple instances of the dialog class and they cannot listen to state
field at the same time, because only one of them receives events and the rest do not.
There already exists a pull request which fixes the issue. It's pretty small change so should be easy to review and merge.
My impression is that FlutterBluePlus is intended to be a stable and more simple version of FlutterBlue.
When should I prefer this library?
Hi best bluetooth flutter developers in the world.
I tried an app and it works very well in android 11 and 10, but, when i switch to android 12 it says:
D/permissions_handler( 8510): Bluetooth permission missing in manifest
These are my permissions, what i have to do for let flutter_blue_plus works on android 12?
`
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />`
I have a file that is larger than 512 bytes to send to an esp32. I'm sending "withoutResponse: false", the flutter_blue_plus library does the split according to the mtu size without problems, but when it reaches 512 bytes it returns an error to write in characteristic. To solve this I have a function that splits the file and writes each 512 bytes.
Esp32 can send me files larger than 512 without doing anything. Can I send larger files without splitting?
How do I check, if BLE device with particular Bluetooth ID is discoverable or not?
Like I have a single or multiple device(s), And I want to check whether they are within range and is connectable.
Thanks
Hi,
Does this have a function to change the preferred PHY speed?
from 1M to 2M for BLE 5.x ?
Tks!
@boskokg I've been searching for a way to do a ble scan in the background, I was using flutter_blue but that doesnt work. does this package support it? or plans to?
I am not sure what I did wrong. When I tried to build the app, I get following error
An exception has occurred in the compiler (1.8.0_242-release). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)
at com.sun.tools.javac.util.Assert.error(Assert.java:133)
at com.sun.tools.javac.code.TypeAnnotations.annotationType(TypeAnnotations.java:231)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.separateAnnotationsKinds(TypeAnnotations.java:294)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:1066)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitClassDef(TypeAnnotations.java:1042)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
at com.sun.tools.javac.code.TypeAnnotations$1.run(TypeAnnotations.java:127)
at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:152)
at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:129)
at com.sun.tools.javac.comp.Enter.complete(Enter.java:512)
at com.sun.tools.javac.comp.Enter.main(Enter.java:471)
at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:74)
at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:55)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:40)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:97)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)
at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompiler.execute(CleaningJavaCompiler.java:53)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory.lambda$createRebuildAllCompiler$0(IncrementalCompilerFactory.java:98)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:61)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:45)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:51)
at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:343)
at org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:237)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:209)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
at org.gradle.api.internal.project.taskfactory.IncrementalInputsTaskAction.doExecute(IncrementalInputsTaskAction.java:32)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:555)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:540)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:523)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:260)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:33)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:67)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:42)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:159)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:72)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:43)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:187)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:179)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:72)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:184)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:177)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:39)
at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:40)
at org.gradle.execution.DefaultBuildWorkExecutor.access$000(DefaultBuildWorkExecutor.java:24)
at org.gradle.execution.DefaultBuildWorkExecutor$1.proceed(DefaultBuildWorkExecutor.java:48)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:49)
at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:40)
at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:33)
at org.gradle.execution.IncludedBuildLifecycleBuildWorkExecutor.execute(IncludedBuildLifecycleBuildWorkExecutor.java:36)
at org.gradle.execution.DeprecateUndefinedBuildWorkExecutor.execute(DeprecateUndefinedBuildWorkExecutor.java:42)
at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.run(BuildOperationFiringBuildWorkerExecutor.java:57)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:42)
at org.gradle.initialization.DefaultGradleLauncher.runWork(DefaultGradleLauncher.java:265)
at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:174)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:126)
at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:72)
at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:178)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:67)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.lambda$execute$0(InProcessBuildActionExecuter.java:54)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:87)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:53)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:33)
at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:49)
at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:32)
at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:27)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:104)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:64)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.lambda$execute$0(SessionScopeLifecycleBuildActionExecuter.java:54)
at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:67)
at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:50)
at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':flutter_blue_plus:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 15s
Exception: Gradle task assembleDebug failed with exit code 1
Exited (sigterm)
Checks if Bluetooth functionality not working in android 12 release mode
As the title suggests I am trying to read the value of descriptors for characteristics. This works fine on android but doesn't seem to work for iOS. Has anyone experienced or overcome this issue?
I have a Ubuntu build server that I'm trying to use to generate app APK files. When I run flutter build apk
on the Linux server, it fails and I get the error below related to flutter_blue_plus
. The interesting thing is that I tested the build on a Windows PC, and it worked fine. Both machines are running Flutter 2.10.5 and dart 2.16.2.
Here is the error message:
$ flutter build apk
💪 Building with sound null safety 💪
Running Gradle task 'assembleRelease'...
An exception has occurred in the compiler (1.8.0_312). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)
at com.sun.tools.javac.util.Assert.error(Assert.java:133)
at com.sun.tools.javac.code.TypeAnnotations.annotationType(TypeAnnotations.java:231)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.separateAnnotationsKinds(TypeAnnotations.java:294)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:1066)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitClassDef(TypeAnnotations.java:1042)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
at com.sun.tools.javac.code.TypeAnnotations$1.run(TypeAnnotations.java:127)
at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:152)
at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:129)
at com.sun.tools.javac.comp.Enter.complete(Enter.java:512)
at com.sun.tools.javac.comp.Enter.main(Enter.java:471)
at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:74)
at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:55)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:40)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:97)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)
at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompiler.execute(CleaningJavaCompiler.java:53)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory.lambda$createRebuildAllCompiler$0(IncrementalCompilerFactory.java:98)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:61)
at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:45)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:51)
at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:343)
at org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:237)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:209)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
at org.gradle.api.internal.project.taskfactory.IncrementalInputsTaskAction.doExecute(IncrementalInputsTaskAction.java:32)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:555)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:540)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:523)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:260)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:33)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:67)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:42)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:159)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:72)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:43)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:[39](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L39))
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:[40](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L40))
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:187)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:179)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:[41](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L41))
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:[48](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L48))
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11[49](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L49))
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:[56](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L56))
at java.lang.Thread.run(Thread.java:[74](http://git.tda.local/ee/obpm/obpm-flutter/-/jobs/880#L74)8)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':flutter_blue_plus:compileReleaseJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org/
Apparently, the package has an unverified uploader
according to Pub.
Can we fix that?
Related docs https://dart.dev/tools/pub/verified-publishers
for my module, i first need to write to first characteristic, follow by set second characteristic indicate to true, and listen to the indicate return value. But i failed to get the return value.
When I run flutter build apk
, I get the following warning:
Note: D:\Users\cvanbeek\installs\flutter\.pub-cache\hosted\pub.dartlang.org\flutter_blue_plus-1.1.3\android\src\main\java\com\boskokg\flutter_blue_plus\FlutterBluePlusPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Version Info:
flutter_blue_plus: 1.1.3
Flutter:
Flutter 2.10.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision c860cba910 (4 weeks ago) • 2022-03-25 00:23:12 -0500
Engine • revision 57d3bac3dd
Tools • Dart 2.16.2 • DevTools 2.9.2
flutter_blue_plus_package_error.txt
Facing an exception during buidling android app (due to flutter blue plus). PFA the log for details.
Other system details:
Tried create a separate project with only flutter_blue_plus package (to isolate the other dependencies). Still facing the same issue.
It would great to eventually be cross-platform with all platforms Flutter supports.
Add the standard Android and ios configuration to the documentation, including Android 12
This plugin works, but not as intended in Android 12.
In Android 12, the scan results in devices, but it is not discovering the beacons and some BLE devices. However same code in lower android versions discovers them. What I am doing wrong? Or is it an issue with plugin?
I have following in AndroidManifest.xml.
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<!-- Needed only if your app communicates with already-paired Bluetooth
devices. -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
And in my code
I have requested permissions like this before scanning.
final permissionBT = await Permission.bluetooth.request().isGranted;
final permissionBTScan = await Permission.bluetoothScan.request().isGranted;
final permissionBTConnect =
await Permission.bluetoothConnect.request().isGranted;
final permissionBTAd =
await Permission.bluetoothAdvertise.request().isGranted;
final permissionLoc = await Permission.location.request().isGranted;
final permissionLocALways =
await Permission.locationAlways.request().isGranted;
final permissionLocInUse = await Permission.locationWhenInUse.request().isGranted;
Very gratefull for this awesome bluetooth package for flutter.
For my problem i need to write data to a specific charachteristic in hexadecimal format on to a GATT server (UART service).
Using the write function on characteristic i see that the only available input it the list of int.
Is there a way to write to the charachteristic in hex format.
For example how to write this hex data (497100000000100A5D) to characteristic?
When device is disconnected (not manually) instead of sending a 'disconnect' event, a 'connecting' event is sent.
Ios: Every time you open the APP, the first scan always fails, and the second scan is normal
This problem does not exist with Flutter Blue
Hello, I'm wondering why you didn't just forked the previous one with whole commit history and previous acknowledgement of all of the contributors but created a new one from scratch? Are there some reasons for this?
The original flutter_blue
plugin had MacOS support (somewhat broken after moving to null safety). Please add this functionality to the flutter_blue_plus
Original issue for MacOS support and PR
pauldemarco/flutter_blue#463
Some details on the later MacOS issue:
pauldemarco/flutter_blue#657
Calling 'FlutterBluePlus.instance' asserts with: Cannot set the method call handler before the binary messenger has been initialized. This happens when you call setMethodCallHandler() before the WidgetsFlutterBinding has been initialized. You can fix this by either calling WidgetsFlutterBinding.ensureInitialized() before this or by passing a custom BinaryMessenger instance to MethodChannel().
(I noticed an old issue on the old 'flutter_blue' project which has sat untouched for two years. Is there any chance this could be made to work here?)
I have a device and i can see it by bluetooth of mobile but i can no see it by this plugin
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.