Comments (3)
This seems to be the type of error mentioned at the bottom of the audio_service
README page, and the solution would be to submit a bug report for that other project. Before I explain the error, I want to suggest an alternative plugin called webview_flutter
which is an official plugin from Google. If you want to use the pre-AndroidX version of this plugin, add the following to your pubspec.yaml:
webview_flutter: 0.2.0 # Last release before AndroidX
If you prefer to use flutter_inappbrowser and are willing to submit a bug report to that project, here is a little bit of an explanation of what's going on.
When you use audio_service
, your app is going to set up two Android contexts for running code: The "activity" context for running UI code, and the "service" context for running background audio code. The idea is that even if the activity context is destroyed, the service context will live on and audio playback will continue without the UI. Because we want to run Dart code in both contexts, we have to initialise a plugin registry for each context which allows dart code running in that context to make use of plugins. When the plugin registry is initialised, it basically calls registerWith
on all of your plugins. The problem is that a lot of older plugins were unfortunately coded assuming that they can just call the Android Flutter method registrar.activity()
to get the current activity and use it as a context to do various things (in Android, you basically need a reference to a context to be able to perform many API calls). But when registerWith is called from the background service context, registrar.activity() will return null, and attempting to use this context will result in a NullPointerException. If the plugin is not intended to be run in the background, the plugin should still check if registrar.activity() returns null and then do nothing. Remember that there are two plugin registries so each plugin is registered twice. It's fine for the one being registered in the background to simply do nothing, but it should at least guard against crashing with a NullPointerException.
When I look at the code for flutter_inappbrowser, I see that it's also storing the registrar in a static field which is problematic. Since there are two registries, registerWith will be called twice on the same plugin, one in each context, and you don't want the second one (probably the service) to override the first one (probably the activity). So that should be changed to an instance field also. There seem to be many other static fields too, so the plugin author may need to figure out which ones need to be distinct within each plugin registry and change them to instance fields.
Anyway, I recommend just using webview_flutter ;-)
It's still useful to know how this works, though, because that error message you posted over on the iOS issue, and the reason why you had to upgrade your Flutter to the latest version to get the newest APIs, has something to do with iOS's equivalent to what I described above. This new iOS API apparently brings the iOS implementation of Flutter background execution on par with the Android implementation so that it is possible for background dart code on iOS to load plugins via the registry.
from audio_service.
@ryanheise Thank you for the explanation, its very helpful.
I will take a look atwebview_flutter
, but in my initial search for using webviews in flutter, every plugin had issues with brining up the keyboard in the webview, and/or missing some js injection methods I needed, but I'll take another look.
I have submitted a bug report to flutter_inappbrowser
As a last resort, I will fork flutter_inappbrowser
and make the changes myself.
from audio_service.
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs, or use StackOverflow if you need help with audio_service.
from audio_service.
Related Issues (20)
- Update notification without stopping audio. HOT 8
- Kotlin coroutine exception cause apps crash while launching. HOT 3
- Crash at launch - Fatal Exception: android.app.RemoteServiceException$BadForegroundServiceNotificationException HOT 11
- Add updateTime parameter to PlaybackState.copyWith
- Asking for notification permission on runtime sometimes leads to crashes if using this library HOT 8
- Is it possible to support custom notification parameters? HOT 3
- Random exception Connection aborted HOT 2
- Android 14/SDK 34 HOT 3
- [just_audio_background] Can't release background audio service at IOS
- Cover art saved as a file does not get displayed on Android Auto HOT 8
- Targeting S+ (version 10000 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
- java.lang.IllegalArgumentException - context shouldn't be null HOT 4
- Adding an option in AudioServiceConfig to switch to lower priority state on AudioProcessingState.completed HOT 3
- `playbackState.add(...)` doesn't update the notification HOT 2
- Shouldn't shuffle the queue when inserting a new queueItem to a specific index HOT 3
- Trouble closing an audio session HOT 3
- Trouble closing audio session HOT 5
- Null pointer exception with audioHandlerInterface inside sendNotificationClicked() HOT 9
- Seekbar is always displayed even without MediaAction.seek HOT 10
- audio_service >=0.17.0-nullsafety.0 depends on js ^0.6.3, please upgrade to 0.7 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from audio_service.