如何在没有活动的情况下调用函数

问题描述

我想问一下Android部分出现问题的问题

public class FlutterPluginMint2Plugin implements FlutterPlugin,MethodCallHandler,ActivityAware,OnServiceBindListener {

    ........

    /**
     * Plugin registration.
     */
    public static void registerWith(Registrar registrar) {
        FlutterPluginMint2Plugin instance = new FlutterPluginMint2Plugin();
        Activity activity = registrar.activity();
        Application application = null;
        if (registrar.context() != null) {
            application = (Application) (registrar.context().getApplicationContext());
        }
        instance.setup(registrar.messenger(),application,activity,registrar,null);
    }

    private void setup(final BinaryMessenger messenger,final Application application,final Activity activity,final PluginRegistry.Registrar registrar,final ActivityPluginBinding activityBinding) {
        synchronized (initializationLock) {
            this.activity = activity;
            this.application = application;
            this.context = application;
            mChannel = new MethodChannel(messenger,CHANNEL + "/methods");
            mChannel.setMethodCallHandler(this);
            eChannel = new EventChannel(messenger,CHANNEL + "/events");
            eChannel.setStreamHandler(stateHandler);
            
            **MonitorDataTransmissionManager.getInstance().bind(DeviceType.HealthMonitor,this);**

            
        }
    }

    .......
}

但是我需要的绑定具有无法在AAR库中的 MonitorDataTransmissionManager 类中更改的功能

public void bind(@NonNull DeviceType deviceType,@NonNull MonitorDataTransmissionManager.OnServiceBindListener listener) {
        if (listener instanceof Activity) {
            this.mDeviceType = deviceType;
            this.mBindListener = listener;
            this.mActivity = (Activity)this.mBindListener;
            Intent serviceIntent = new Intent(this.mActivity,OnBLEService.class);
            this.mActivity.bindService(serviceIntent,this,1);
        } else {
            throw new ClassCastException("MonitorDataTransmissionManager need bind in a ACTIVITY.");
        }
    }

在我的示例中是 main.dart

public class MainActivity extends FlutterActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FlutterPluginMint2Plugin.registerWith(this.registrarFor("com.mandayahealth.Flutter_plugin_mint2.FlutterPluginMint2Plugin"));
    }
}

我可以在班级获得活动,但主要问题是 this ,它在我的 FlutterPluginMint2Plugin 类内部调用,是否仍然可以替换 this的调用?这样在 MonitorDataTransmissionManager 类中可以运行吗?

我尝试将Listener强制转换为活动,但没有希望,也无法将其强制转换为活动

这是我的错误示​​例:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mandayahealth.Flutter_plugin_mint2_example,PID: 2615
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mandayahealth.Flutter_plugin_mint2_example/com.mandayahealth.Flutter_plugin_mint2_example.MainActivity}: java.lang.classCastException: MonitorDataTransmissionManager need bind in a ACTIVITY.
        at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2489)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2551)
        at android.app.ActivityThread.access$1000(ActivityThread.java:169)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1432)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:194)
        at android.app.ActivityThread.main(ActivityThread.java:5572)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763)
     Caused by: java.lang.classCastException: MonitorDataTransmissionManager need bind in a ACTIVITY.
        at com.linktop.MonitorDataTransmissionManager.bind(MonitorDataTransmissionManager.java:120)
        at com.mandayahealth.Flutter_plugin_mint2.FlutterPluginMint2Plugin.setup(FlutterPluginMint2Plugin.java:177)
        at com.mandayahealth.Flutter_plugin_mint2.FlutterPluginMint2Plugin.registerWith(FlutterPluginMint2Plugin.java:143)
        at com.mandayahealth.Flutter_plugin_mint2_example.MainActivity.onCreate(MainActivity.java:17)
        at android.app.Activity.performCreate(Activity.java:6033)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
        at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2442)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2551) 
        at android.app.ActivityThread.access$1000(ActivityThread.java:169) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1432) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.app.ActivityThread.main(ActivityThread.java:5572) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763) 

所以我的问题是在没有 this 的情况下如何调用 MonitorDataTransmissionManager bind 函数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)