我正在为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以便解决问题:
-
删除
import io.flutter.app.FlutterActivity;
以使用embedding.android.FlutterActivity
-
使用
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
。