adolfintel / openpods Goto Github PK
View Code? Open in Web Editor NEWThe Free and Open Source app for monitoring your AirPods on Android
Home Page: https://fdossena.com/?p=openPods/index.frag
License: GNU General Public License v3.0
The Free and Open Source app for monitoring your AirPods on Android
Home Page: https://fdossena.com/?p=openPods/index.frag
License: GNU General Public License v3.0
The German, Spanish and Chinese translations need to be updated because a few strings have been added in Alpha 10.
Could you please add showing status in case then location disabled but some valid beacons received in TIMEOUT_CONNECTED time?
Didn't find any widgets in GPlay which can be put to desktop and just like weather widget display battery levels.
Hi. Thanks for your contribution to the opensource android community.
I have a question regarding how battery values are encoded inside the payload.
You said they are storing in range 0-10(0-100%, step 10). But how the iPhone shows battery charge with step by 1%?
Maybe you could recommend some resources about the reverse engineering of AirPods signal?
Best regards,
Serhii.
Will you try to implement fake AirPods?
Or can you give a hint how you discovered how to get the percentage on the real ones?
So I accidentally did the "hide app" action in the app settings. How do I un-hide it?
Any chance you could document some pointer about how to undo the app hiding either in the app itself or at least in the README?
For reasons that are currently unknown, occasionally, the notification will get stuck in an indeterminate state. It seems to happen randomly after the screen has been turned off for some time with the AirPods connected.
When this glitch occurs, the application becomes unresponsive to bluetooth events (switching on/off, connecting/disconnecting AirPods) and needs to be terminated and restarted.
If you're experiencing this issue, just know that I'm aware of it and the application won't reach 1.0 with this garbage bug.
We should remove the location permission request for API ≥ 29 as it is not needed.
I'll open a PR later today if I have time.
In MIUI Global, the battery either always shows 100% both, or keep loading, have no response, I have already set no restriction for this app,
Hi! Really love OpenPods and I've been using it since I got my phone. There's one little issue when using it with the pixels dark theme though: The whole notification is inverted, not just the background so the AirPods and Case are completely blacked out. This isn't really a huge issue but just a small cosmetic thing. Can it be fixed? Thanks!
Hi, I am pleased to report that my Powerbeats Pro earbuds are fully functional with the app. No issues thus far. Minor enhancement would be purely cosmetic and thats just changing the icons from airpods to the powerbeats art. Please let me know if you would like any debug info. Thank you for your work.
Hello,
First of all, thank you for your work on this project.
Today, with my airpods pro, I am receiving a completely blank OpenPods notification (there are two notifications here - one for openpods, and a second one for kdeconnect):
I'm using LineageOS 9 on a Pixel XL 128GB.
I tried clearing the storage for openpods, but the issue remained.
I just got my Pro Airpods yesterday and didn't have the issue until today - not sure what has changed.
Please let me know if there is any additional information I can provide to assist in resolving this issue.
Cheers!
Replica AirPods will not report correct battery level. Levels always are reported as 100% for left/right pods and 65% for case
Hi, I've just bought a new pair or AirPods clones (Urbanpods, I suspect them being the same as the i2000 though).
Your app does not work by default but I did manage to fork your repo and to reverse engeneer how they report the battery percentage.
Basically, instead of being encoded in the 12th,13th,14th nibble of the manufacturer info it lies on the 12th,13th and 14th byte and works a little bit differently (the actual percentage is reported and the first bit indicates if it's charging).
The problem I have is that as soon as the earpods connect with the phone I cannot get their manufacter info anymore (basically the device goes totally invisible to any btle scan app).
This way I can only read the battery level once when your app detects them but they have not gone invisible yet.
Do you happen to know a way to read the manufacter info directly from the connected device?
Also, how do the original AirPods work? Don't they go invisible as soon as a phone is connected? I don't have a pair of those to try.
Thanks for your help and sorry for my English, it's not my first language.
First of all: Thanks for the application, it is very useful :)
Secondly, I am not sure why the notification icon is so much larger than other icons on my phone. See here:
I fixed it by resizing the notification_icon.png
resource (maybe that could be the wrong approach …):
I can make a pull request if you want :)
Cheers
If the app is closed in the first time it will kill the service.
I noticed this on the metro last week, the notification widget appears to be highly unstable, swapping between my own Airpod pros and regular Airpod icons while also showing various battery levels.
My own were at 25% and every 3-5 seconds the notification widget would report them as normal Airpods at 95% or some other device around me - screenshots.
I think what was happening was that it was reading battery and device information from other people around me (the behavior stopped as soon as I left the metro car). I find this odd though, I thought Bluetooth data like this was encrypted and only available to paired devices? How is it picking up this meta data from unpaired devices? It seems if nothing else the increased data processing from reading meta data from other people with Airpods is likely to drain your battery life much faster.
Hi!
I have a few feature requests/ideas/suggestions that would help users to save space in their notification area while using OpenPods:
Hey there, is there a reason this app needs permission to access my location?
Loving the app so far, thanks for your efforts.
Here's a small wish-list of features that I've seen on other play store apps so I'm fairly certain they're all possible although how difficult I can't say...
This essentially requires having the Location turned on all the time - that was the reason why I refused to use the app. AirDroid from GPLay is OK with Location off.
P.S.: all that stuff with location permissions make a bad impression considering that app only aimed at showing battery level. I see that all GPLay Airpods apps require that permission. Though having some mode without location permission would be a killer feature to me (even if it'll require manual refreshing of the status of the app/battery).
I see these pretty regularly on AOSP QQ2A.200405.005 on a Google Pixel 3:
04-26 17:28:50.883 32372 32393 E AndroidRuntime: FATAL EXCEPTION: Thread-2
04-26 17:28:50.883 32372 32393 E AndroidRuntime: Process: com.dosse.airpods, PID: 32372
04-26 17:28:50.883 32372 32393 E AndroidRuntime: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1040360 bytes
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.app.NotificationManager.notifyAsUser(NotificationManager.java:497)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.app.NotificationManager.notify(NotificationManager.java:444)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.app.NotificationManager.notify(NotificationManager.java:420)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at com.dosse.airpods.PodsService$NotificationThread.run(PodsService.java:332)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: Caused by: android.os.TransactionTooLargeException: data parcel size 1040360 bytes
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.os.BinderProxy.transactNative(Native Method)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.os.BinderProxy.transact(BinderProxy.java:511)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.jav
a:2791)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: at android.app.NotificationManager.notifyAsUser(NotificationManager.java:494)
04-26 17:28:50.883 32372 32393 E AndroidRuntime: ... 3 more
Leaving the phone running idle for a few hours with logcat streaming to disk, I see:
04-25 21:00:47.305 3715 3749 E AndroidRuntime: Process: com.dosse.airpods, PID: 3715
04-26 15:40:43.276 18743 18764 E AndroidRuntime: Process: com.dosse.airpods, PID: 18743
04-26 16:01:16.537 29185 29206 E AndroidRuntime: Process: com.dosse.airpods, PID: 29185
04-26 16:19:36.458 30000 30021 E AndroidRuntime: Process: com.dosse.airpods, PID: 30000
04-26 16:40:07.503 30816 30837 E AndroidRuntime: Process: com.dosse.airpods, PID: 30816
04-26 16:56:25.907 31963 31984 E AndroidRuntime: Process: com.dosse.airpods, PID: 31963
04-26 17:12:45.710 32039 32060 E AndroidRuntime: Process: com.dosse.airpods, PID: 32039
04-26 17:28:50.883 32372 32393 E AndroidRuntime: Process: com.dosse.airpods, PID: 32372
04-26 17:44:49.790 32683 32704 E AndroidRuntime: Process: com.dosse.airpods, PID: 32683
04-26 18:00:50.762 1036 1071 E AndroidRuntime: Process: com.dosse.airpods, PID: 1036
04-26 18:16:45.472 1172 1212 E AndroidRuntime: Process: com.dosse.airpods, PID: 1172
04-26 18:34:13.700 1662 1701 E AndroidRuntime: Process: com.dosse.airpods, PID: 1662
04-26 18:55:49.690 2021 2063 E AndroidRuntime: Process: com.dosse.airpods, PID: 2021
04-26 20:14:16.450 2516 2541 E AndroidRuntime: Process: com.dosse.airpods, PID: 2516
04-26 20:56:19.701 4138 4159 E AndroidRuntime: Process: com.dosse.airpods, PID: 4138
I don't think my AirPods were even removed from the case when these errors occurred.
I believe I was running OpenPods 1.3 (13) from F-Droid. Not positive because I uninstalled it.
The crash signature looks similar to #47 but in my case, the parcel size is on the order of 1MB instead of 3MB.
Foreground Services aren't affected by Doze. You are already showing a semi-persistent notification, so there is there reason to ask user for Doze exception instead of going foreground.
According to #4, AirPods are supposed to show the charge status of the case while it's charging, even if the case is empty.
In my own testing and reverse engineering, I noticed that my AirPods send the case charge status only when there's at least 1 pod in the case, otherwise they just report the case as disconnected. My AirPods also don't show any difference in the data that they send when the case is charging compared to when it's not, so I was unable to identify where this additional case charge status is.
Despite my best efforts, I was unable to figure this one out, so if you're willing to try, the code that decodes the AirPods status beacons is in PodsService.java, and it is fully documented.
If you can figure this out, I am willing to reward you :)
I don't want this app to be distributed through Google Play so I'm looking for ideas on how to make it hard or impossible to do it. This is because I noticed that some assholes redistributed this as a paid app or with ads, without even crediting the original app, and I had to send several DMCA requests.
So far, here's what I came up with:
Ideas?
Hello!
I've recently become aware that this app is preventing my phone from entering deep sleep. It's issuing a wakelock anywhere from 15 to 40 times a minute, all the time. I was probably the one who requested the feature that forced you to do that 😄
Is there any way you can stop the scanning unless it's a) connected or b) manually requested?
Thanks!
Hi. I've downloaded your app using the direct link provided in the readme, and opened my Airpods 2 case when they are connected to the bluetooth and gps is turned on(just in case it is needed), allowed all the app wanted me to, yet there is no notification while I have your app opened on my Xiaomi Redmi 6. I am a developer myself, so if any additional info needed (data from android studio or anything else that might show why the app doesn't seem to detect the pods even though the music is playing through them), please let me know. IPhone 8 shows the firmware version as 2A364, were 1A661 before iphone has auto updated them.
What about working with all the headphones? I just want to get one common and open application, without ads and problems with Google services.
I need to know if the app works with the new AirPods Pro.
If it does, I also need some way to distinguish them from regular airpods to show the proper images.
https://play.google.com/store/apps/details?id=pro.vitalii.andropods
The notification of that app looks surprisingly similar to the notification of Open Pods.
Connection: Shows battery level on any local set of airpods. Regardless if they have ever been connected to phone or not.
Icon shows up constantly even when not near airpods.
The icon image looks folded when it's on the lockscreen due to the image being too tall.
Verizon Note 9 on Android 9.0
Are either of these features implemented as part of the android service?
Recently, i've tried OpenPods on multiple devices, but only on one of these did it ever work.
After looking around this repository a little bit and noticing some specific mentions of Bluetooth LE, i came to the realization that the device on which OpenPods is working on is my only Android with Bluetooth LE support, so i'm wondering:
If yes, it would be great if this could be communicated more clearly towards anyone using the app. The only mention of Bluetooth LE that i could find among the README of this Repo, the description on F-Droid and within the app itself was the little note displayed during the first start of the app, explaining why the bluetooth and run in background permissions are requested, and i was completely unaware of it until right now - after actively looking for it. As it is only shown once and easily brushed away if you don't care about and simply allow each permission this notice can easily go undetected as in my case. And looking at it right now, i'm suspecting that i even did notice it once but without giving the "LE" part any importance and rather just focusing on the "Bluetooth" part, which was obvious to me.
So yeah, if applicable, any notice in the form of "It's possible that your device lacks the hardware support to run OpenPods. If it isn't capable of handling Bluetooth LE, OpenPods will not work." anywhere in the README, F-Droid description, the application main screen or maybe even a one-time popup would be very nice.
First off, great thanks for the app. Appreciate that it's FOSS and on F-Droid.
The battery life for the case and any Airpods left in the case is reported only briefly, and then only the in-ear Airpods continue to report battery life. The notification should ideally continue displaying the most recently seen battery life reports for the case + Airpods while there is still at least one Airpod connected.
In case it's useful to know, I am using Airpods Pros.
https://play.google.com/store/apps/details?id=com.androidpods.airpods
This app literally uses screenshots from OpenPods
I speak Russian, Ukrainian, English and some Swedish (not fluent though) and may help translating your app. I suggest that we keep track of the languages supported in the README.md.
@Electric1447 I merged your PR since it works well, however I noticed two issues with the new notification layout:
I'm sure I can fix those issues myself but since it's your PR, it's probably best if you could do this to avoid introducing other glitches.
Is there anyway I can use OpenPods without GPS location sorry for being a pain.
Sorry, this not is a issue, but is a one feature request, ist possible add typicaly gestures? for for tap
thanks!
Hello, I have tried to install the application and when connecting the AirPods the application does not detect them.
The app crashes when the location is turned on after being turned off for a long time.
FATAL EXCEPTION: Thread-3
Process: com.dosse.airpods, PID: 19638
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 3312968 bytes
at android.app.NotificationManager.notifyAsUser(NotificationManager.java:503)
at android.app.NotificationManager.notify(NotificationManager.java:450)
at android.app.NotificationManager.notify(NotificationManager.java:426)
at com.dosse.airpods.PodsService$NotificationThread.run(PodsService.java:332)
Caused by: android.os.TransactionTooLargeException: data parcel size 3312968 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:547)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:2962)
at android.app.NotificationManager.notifyAsUser(NotificationManager.java:500)
... 3 more
It dont works on my phone is apple galaxy s2 phone please help thankyou
The airpods are always broadcasting battery status while the case is plugged in. Would be nice to be able to check on the % charge the case is at without having to connect.
I'm not sure if this is maybe out of scope for this project. However, Airpods from the 2nd gen don't work, mostly the battery status is not displayed.
First off, I am so happy I found this app, tried every app in the Play Store, and everything is trash. Great work with this one! Just what's needed and no bloatware.
Using this on my Note 10 with Dark mode enabled, but the notification is white. Would it be possible to have a Dark mode for the notification?
Here's an example of a Play Store app doing dark notifications: https://lh3.googleusercontent.com/qx861-4RgJ_KpAV8LUC9z6yncolCLaVg0y_3YKDy3r_rrWTbCPYJr4dQzKCEYy3kCIo=w1920-h978
Thank you!
I am having problems with OpenPods sending notifications after a restart. I am on a Oneplus 7 pro and I have to reinstall the OpenPods app to get it working again.
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.