Hey community!
I am the developer of ALN: Bringing Apple-exclusive features to Android (and Linux). It brings a lot of features that are only accessible on iOS/iPadOS and macOS (and tvOS) devices including but not limited to:
- Perfect ear detection: Currently available solutions rely on Bluetooth Low Energy Broadcasts, sent by the AirPods which are not accurate by any means. They don’t usually work AirPods don’t send these broadcasts regularly due to Apple’s new firmware upgrades. But my app talks to AirPods just like a real Apple software would do, meaning AirPods sends all the data that it would to Apple devices.
- Accurate Battery information: Just like how ear detection also relies on AirPods to occasioanly send BLE Broadcats, battery information is also retrieved by this very thing. What’s worse is that Apple only sends approximate (rounded off to the lowest tens) battery levels. Because of the same reasons mentions above, my app can also get accurate battery data.
- Use conversational awareness: Thanks to the geniuses at apple, this (just like ear detection) is also not done by the AirPods themselves and just indicated to the connected device when the user starts speaking. So, my app recognizes that data and automatically lowers media volume just like it normally would on Apple software.
- Ability to set Noise Control Mode: Using whatever AirPods broadcast to gather data means you can’t send data to AirPods. But, with my app, I can send anything and everything to the AirPods. Most importantly, I can set the Noise Control modes of the AirPods.
- Ability to customize AirPods: As a continuation of the last one, I can rename the Airpods, and control other settings, like what the long press does, toggle Loud Sound Reduction etc. right from my phone without connecting the AirPods to my Mac for configuring and switching over to Android again to use them on the go.
Some other stuff I’ve also been working upon:
- Automatic device switching between Linux and Android (when media starts playing/a call is received) if AirPods are connected to one of the OS’s.
- Be able to control AirPods from the other device even if they’re connected to one. Currently, if the AirPods are connected to linux, and have your phone connected to your PC over Bluetooth, you can access the app (battery, set nc modes, etc.) as if the AirPods are connected to the phone itself.
The catch?
Well, Apple being Apple, didn’t follow standards, and as a result, Android’s bluetooth stack can’t talk to the AirPods (L2CAP is used for communication with AirPods). Basically, AirPods expect a “Handshake” packet to be sent before anything else is sent after establishing a connection. But, Android’s Bluetooth stack sends an additional packet to check for “Extended Flow (An advanced mode of data transmission)”, which the AirPods do not respond to, and hence the connecion over L2CAP remains unconnected.
But, I compiled the library myself, and I can also patch the library, and force Android to use the patched one with root access, and make my app work.
My request to Nothing developers:
Please checkout the commit I made that makes my app work by removing the source of the problem in the bluetooth stack, and if possible implement this in NothingOS.
My request to the community:
If anyone has a rooted Nothing Phone, and AirPods, please do try my app 😃
Thanks!
VirusTotal scan for v0.0.3-hotfix
Koodous scan