Baseflow / XamarinMediaManager

Cross platform Xamarin plugin to play and control Audio and Video
https://baseflow.com
MIT License
761 stars 304 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 11 months ago

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

efhayati commented 10 months 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 10 months 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 9 months 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 2 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" />