Baseflow / XamarinMediaManager

Cross platform Xamarin plugin to play and control Audio and Video
https://baseflow.com
MIT License
769 stars 306 forks source link

MAUI Android audio stops after running in the background for about 15 minutes #900

Open copang opened 1 year ago

copang commented 1 year ago

I'm using the latest version (1.2.2) for my MAUI app (.net 7) and I'm having problems running it on Android. After the app goes into the background for about 15 minutes the audio stops and when I go back to the app it restarts instead of resuming the current state. I noticed that on the notification manager there is already a player, so I think it has been registered as a service to be able to run in the background. I tried to build in release mode but the result is the same. And of course I have turned off the battery saving modes on the devices already. The devices I am testing are Xiaomi, One plus (Android 12 & 13). Also, I accidentally discovered that if the phone is connected to the charging cable (which is charging) the audio can play for hours in the background.

copang commented 1 year ago

@ArchangelWTF @janwiebe-jump can you help me?

arahmancsd commented 1 year ago

same here. I noticed the app is crashing/closing after 10-15 mins when the app is in the background/foreground.

efhayati commented 1 year ago

Same issue here. It woks fine when the phone is charging, but otherwise after 2-3 minutes the audio stops. I'm trying to play an stream.

Platform: Android (Android 13) MAUI (.net 7) Plugin.MediaManager 1.2.2

sandreas commented 1 year ago

Maybe you need to aquire a wifi lock to support streaming content.

https://github.com/jamesmontemagno/AndroidStreamingAudio/blob/master/Part%202%20-%20Lock%20Screen/Services/StreamingBackgroundService.cs

szurgot commented 1 year ago

This is happening because the service is never set to Foreground which is due to the initialization of the PlayerNotificationManager is happening incorrectly. The PlayerNotificationManager is being built on line 118. but one of it's parameters isn't is null when it's invoked: https://github.com/Baseflow/XamarinMediaManager/blob/develop/MediaManager/Platforms/Android/MediaSession/MediaBrowserService.cs#L118

Since the NotificationListener is properly constructed on the next line, switching those two lines will resolve the problem.

ikeremozcan commented 8 months ago

Android devices has battery optimization settings for the apps. Could you try to get this permission and see that's work for you. if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { String? packageName = Platform.CurrentActivity?.PackageName; Android.Content.Intent intent = new Android.Content.Intent(); intent.SetAction(Android.Provider.Settings.ActionRequestIgnoreBatteryOptimizations); intent.SetData(Android.Net.Uri.Parse("package:" + packageName)); Platform.CurrentActivity?.StartActivity(intent); }

Also add this to manifest <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

arahmancsd commented 4 months ago

For anyone looking at this, @szurgot is right switching those two lines solves the problem. Additionally, you need to add the following permission in your manifest file.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>

I use MediaManager only, so I forked the project and upgraded it to .net 8. The app crashes without permission. So switch the lines and add the permission in your manifest file and enjoy the library.

BenDTU commented 4 months ago

Can also confirm the above fixes the issue.

sandreas commented 4 months ago

@arahmancsd

so I forked the project and upgraded it to .net 8

Is it this one? I see no .net8 specific changes and would be very interested.

arahmancsd commented 4 months ago

@arahmancsd

so I forked the project and upgraded it to .net 8

Is it this one? I see no .net8 specific changes and would be very interested.

I didn't commit my code as I only upgraded the MediaManager project which I needed it. I have just upgraded all the repos and builds as expected.