Fix MissingPluginException error when calling this plugin in an Android background service because `init()` method is only invoked on `onAttachedToActivity()` method, which is not available in the background service.

- Change calling `init()` to `onAttachedToEngine` instead
pull/701/head
nvnguyen 2 years ago
parent c2a44c0b97
commit 27cb1bac82
  1. 20
      flutter/flutter/android/src/main/java/com/arthenica/ffmpegkit/flutter/FFmpegKitFlutterPlugin.java

@ -161,7 +161,8 @@ public class FFmpegKitFlutterPlugin implements FlutterPlugin, ActivityAware, Met
return; return;
} }
FFmpegKitFlutterPlugin plugin = new FFmpegKitFlutterPlugin(); FFmpegKitFlutterPlugin plugin = new FFmpegKitFlutterPlugin();
plugin.init(registrar.messenger(), context, registrar.activity(), registrar, null); plugin.init(registrar.messenger(), context);
registrar.addActivityResultListener(plugin);
} }
protected void registerGlobalCallbacks() { protected void registerGlobalCallbacks() {
@ -185,6 +186,7 @@ public class FFmpegKitFlutterPlugin implements FlutterPlugin, ActivityAware, Met
@Override @Override
public void onAttachedToEngine(@NonNull final FlutterPluginBinding flutterPluginBinding) { public void onAttachedToEngine(@NonNull final FlutterPluginBinding flutterPluginBinding) {
this.flutterPluginBinding = flutterPluginBinding; this.flutterPluginBinding = flutterPluginBinding;
init(flutterPluginBinding.getBinaryMessenger(), flutterPluginBinding.getApplicationContext());
} }
@Override @Override
@ -195,7 +197,8 @@ public class FFmpegKitFlutterPlugin implements FlutterPlugin, ActivityAware, Met
@Override @Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) { public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {
Log.d(LIBRARY_NAME, String.format("FFmpegKitFlutterPlugin %s attached to activity %s.", this, activityPluginBinding.getActivity())); Log.d(LIBRARY_NAME, String.format("FFmpegKitFlutterPlugin %s attached to activity %s.", this, activityPluginBinding.getActivity()));
init(flutterPluginBinding.getBinaryMessenger(), flutterPluginBinding.getApplicationContext(), activityPluginBinding.getActivity(), null, activityPluginBinding); this.activity = activityPluginBinding.getActivity();
activityPluginBinding.addActivityResultListener(this);
} }
@Override @Override
@ -648,7 +651,7 @@ public class FFmpegKitFlutterPlugin implements FlutterPlugin, ActivityAware, Met
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
protected void init(final BinaryMessenger messenger, final Context context, final Activity activity, final io.flutter.plugin.common.PluginRegistry.Registrar registrar, final ActivityPluginBinding activityBinding) { protected void init(final BinaryMessenger messenger, final Context context) {
registerGlobalCallbacks(); registerGlobalCallbacks();
if (methodChannel == null) { if (methodChannel == null) {
@ -666,17 +669,8 @@ public class FFmpegKitFlutterPlugin implements FlutterPlugin, ActivityAware, Met
} }
this.context = context; this.context = context;
this.activity = activity;
if (registrar != null) { Log.d(LIBRARY_NAME, String.format("FFmpegKitFlutterPlugin %s initialised with context %s ", this, context));
// V1 embedding setup for activity listeners.
registrar.addActivityResultListener(this);
} else {
// V2 embedding setup for activity listeners.
activityBinding.addActivityResultListener(this);
}
Log.d(LIBRARY_NAME, String.format("FFmpegKitFlutterPlugin %s initialised with context %s and activity %s.", this, context, activity));
} }
protected void uninit() { protected void uninit() {

Loading…
Cancel
Save