sandy-8925 / blexplorer Goto Github PK
View Code? Open in Web Editor NEWThis project forked from ligi/blexplorer
Bluetooth Device Explorer
License: GNU General Public License v3.0
This project forked from ligi/blexplorer
Bluetooth Device Explorer
License: GNU General Public License v3.0
DevicePropertiesDescriber.getServiceName()
reads a JSON file, and then obtains a single value from it. This function is called repeatedly from the UI thread, which is bad for performance and responsiveness.
Change the code to read the file once into memory, and then refer to that copy from DevicePropertiesDescriber.getServiceName()
Currently, DeviceListActivity calculates the scan record string on the UI thread. This is done for each invocation of onBindViewHolder, which is unnecessary heavy work done on the UI thread. Move it to a background thread.
plz increase version and make a git tag. I'm going to ask F-Droid for switching upstream to yours. Of course if @ligi doesn't mind.
the app crashed, logcat follows
adb.logcat.txt
.
JCenter is deprecated, and newer libraries won't be uploaded. They have said that existing ones will remain indefinitely, but it's better to move off of JCenter entirely if possible.
The only library that's available only on JCenter seems to be 'net.steamcrafted:load-toast:1.0.12'
Original source is https://github.com/code-mc/loadtoast
There's a forked and updated version here: https://github.com/mohsenoid/load-toast which seems to be a suitable replacement. Will have to work on using that in the future.
The App class is currently used as an intermediary to store what BluetoothDevice/Gatt/Service is currently being explored in various screens of the app. This is a bad idea, and can result in bugs - instead, this data should be passed from one activity to the other, probably in a Bundle or through other means, and should be scoped to each screen instead of storing in some central location.
Targeting API 26+ means the app will suspend after being in the background for a few minutes, ensuring reduced CPU usage.
in many cases a user is surrounded by tens of devices. So user interface is flooded by those. Better UX could be reached by either:
Stacktrace:
2021-02-27 16:16:48.866 29233-29233/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.ligi.blexplorer, PID: 29233
io.reactivex.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | com.polidea.rxandroidble2.exceptions.BleAlreadyConnectedException: Already connected to device with MAC address FF:FF:AE:46:A4:80
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
at com.uber.autodispose.HalfSerializer.onError(HalfSerializer.java:148)
at com.uber.autodispose.AutoDisposingObserverImpl.onError(AutoDisposingObserverImpl.java:88)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:281)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:124)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7697)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: com.polidea.rxandroidble2.exceptions.BleAlreadyConnectedException: Already connected to device with MAC address FF:FF:AE:46:A4:80
at com.polidea.rxandroidble2.internal.RxBleDeviceImpl$1.call(RxBleDeviceImpl.java:84)
at com.polidea.rxandroidble2.internal.RxBleDeviceImpl$1.call(RxBleDeviceImpl.java:72)
at io.reactivex.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:33)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservableDoOnLifecycle.subscribeActual(ObservableDoOnLifecycle.java:33)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservablePublishAlt.connect(ObservablePublishAlt.java:79)
at io.reactivex.internal.operators.observable.ObservableRefCount.subscribeActual(ObservableRefCount.java:87)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at com.jakewharton.rx.ReplayingShare$LastSeenObservable.subscribeActual(ReplayingShare.java:78)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservableFlatMapSingle.subscribeActual(ObservableFlatMapSingle.java:48)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservableFlatMapSingle.subscribeActual(ObservableFlatMapSingle.java:48)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.internal.operators.observable.ObservableObserveOn.subscribeActual(ObservableObserveOn.java:45)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at com.uber.autodispose.AutoDisposeObservable.subscribeActual(AutoDisposeObservable.java:35)
at io.reactivex.Observable.subscribe(Observable.java:12284)
at io.reactivex.Observable.subscribe(Observable.java:12270)
at io.reactivex.Observable.subscribe(Observable.java:12172)
at com.uber.autodispose.AutoDispose$1$4.subscribe(AutoDispose.java:267)
at org.ligi.blexplorer.characteristics.CharacteristicActivity.onCreate(CharacteristicActivity.kt:82)
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.