I'm creating a music player in android and I want that when I press the headset button, the song will play/pause even if my application is in the background/foreground. I'm using a service class.
How can I trigger the event when the headset button is pressed even if my app is in the background?
Use the guide. There is a description of hardware buttons usage.
Related
I want to use the media buttons to control a foreground app, but not for audio use.
So the goal is to detect button clicks to do certain things in the app.
I can achieve that by using MediaSession and the MediaButtonReceiver. see here
The problem is that when the app is used, often users play music in the background, so the audio focus of the background app takes over the MediaSession and i cannot control my app anymore.
Is there a way to achieve that? Directly listening for button clicks with onKeyDown does not seem to work.
sadly there is no way for two active MediaSessions at the same time. if another app is playing music and run MediaSession then yours doesn't have focus and isn't active... this is made for purpose - better UX - only one "player" app can play music (or video). if this wouldn't work like that and you could play music by few apps at once then how should work media button on e.g. headphones? pasuing/resuming all players? this is just not user-friendly, so Android team introduced MediaSession pattern with option for calling "focus on me now" by any app, but then another app/MediaSession pauses and doesn't get any inputs (this active session does)
if you need physical buttons presses then onKeyDown should work (inside Activity or eventually using AccessibilityService, which would work "globally" in whole system). if you need some on-screen notification buttons presses then just make custom layout for your notification with as much buttons as you like, even styled as a player
note that in Android 11 active MediaSessions notification is stickied to top of notification section when you drop down status bar. your custom notification will be somewhere below between all others (you can manipulate position a bit using priority param for notification/channel)
I wrote an app which starts record audio in response to holding volume up button on phone or headphone, I'm doing it inside dispatchKeyEvent method and it's fine
Problem is, I want to do it when the phone is locked in my pocket, I want to just hold my headphone volume button and start recording, How can I do that in Android? How can you do anything in response to user actions when the phone is locked? For example, how can a music player respond to the user pressing play/pause button on headphone? I know that it is possible, but I don't know how...
I need to open application when power and volume+ buttons long pressed.
Does its possible to detect power button pressing in Accessibility Service? Or maybe exist another way to do this?
You can detect the Volume button up or down on the onKeyEvent() method, but you can't detect the power button, due to the android functionality.
I have Implemented A media player But the Problem is that when i press back button .music stop.but it runs when the app is in background.
Proper approach is to implement media-player inside service. That way music playback will persist when users uses other applications or gets outside of your app.
Remember to call startForeground() with ongoing notification.
Is there a cross device hard button in android that a background service can listen to and act when it is pressed/released?
Thanks
No. You can set up a BroadcastReceiver to watch for the CAMERA or MEDIA buttons, but those are not always available -- some devices do not have the CAMERA button, and the MEDIA button is for use with wired headsets.
Sorry!