Flutter io.flutter.app.FlutterActivity' 已在单一类型导入中定义



我正在为Android开发一个Flutter应用程序,它每天都会发送通知。为了保持本地性,我尝试使用Android后台服务来实现这一点。我遵循了本教程:https://www.youtube.com/watch?v=NXuAzXY_KOo

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
private Intent foreService;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FlutterEngineGetter flutterEngineGetter = new FlutterEngineGetter();
GeneratedPluginRegistrant.registerWith(getFlutterEngine());
foreService = new Intent(MainActivity.this, MyService.class);
new MethodChannel(getFlutterView(), "key_01")
.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
if(call.method.equals("startService")){
startService();
}
}
});
}
private void startService(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
startForegroundService(foreService);
}
else {
startService(foreService);
}
}
}

我得到两个错误,第一个是io.flutter.embedding.android.FlutterActivity已经在单一类型的导入中定义。据我所知,导致这种情况的原因是有两个名为FlutterActivity的类,但我需要这两个类来使用getFlutterEngine((和getFlutterView((方法。如何从一个类中只导入一个方法?
第二个错误是无法解决"MainActivity"中的方法"getFlutterView",我认为解决第一个错误会解决这个问题。
感谢您的时间和提前提供的帮助!

io.flutter.app.FlutterActivity已被弃用(2020年9月(

弃用:FlutterActivity是新的API,现在将取代它班看见https://flutter.dev/go/android-project-migration了解更多迁移详细信息。

为了支持io.flutter.embedding.android.FlutterActivity以便解决问题:

  1. 删除import io.flutter.app.FlutterActivity;以使用embedding.android.FlutterActivity

  2. 使用getFlutterEngine().getDartExecutor().getBinaryMessenger()而不是getFlutterView()创建MethodChannel并将其注册为:

    new MethodChannel(getFlutterEngine().getDartExecutor().getBinaryMessenger(), "key_01")
    .setMethodCallHandler(new MethodChannel.MethodCallHandler() {
    @Override
    public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
    if(call.method.equals("startService")){
    startService();
    }
    }
    });
    

或者,您可以覆盖configureFlutterEngine以获得flutterEngine实例,从而创建MethodChannel

相关内容

最新更新