如何在Flutter中调用Java编写的Android Activity?
用Java实现Flutter调用Android原生Activity
1. 创建目标原生Activity(以相机Activity为例)
在Android项目的app/src/main/java/[你的包名]/目录下新建CameraActivity.java,代码如下:
import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class CameraActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 可在此设置Activity布局,比如拍照界面 // setContentView(R.layout.activity_camera); } }
同时在AndroidManifest.xml中注册该Activity:
<activity android:name=".CameraActivity" />
2. 在MainActivity中配置MethodChannel并处理调用
修改MainActivity.java,添加MethodChannel初始化与方法回调逻辑,收到Flutter的get_image调用时启动目标Activity:
import android.content.Intent; import android.os.Bundle; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "get_image"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler((call, result) -> { if (call.method.equals("get_image")) { // 启动CameraActivity Intent intent = new Intent(MainActivity.this, CameraActivity.class); startActivity(intent); // 可选:给Flutter返回成功状态 result.success("Activity started"); } else { // 处理未定义的方法调用 result.notImplemented(); } }); } }
3. 确认Flutter端代码完整性
补全你的Flutter Widget代码(确保语法闭合):
import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; class CameraButtonWidget extends StatelessWidget { static const myChannel = MethodChannel('get_image'); @override Widget build(BuildContext context) { return ElevatedButton( onPressed: () { myChannel.invokeMethod('get_image'); }, child: const Text('Take Picture'), ); } }
内容的提问来源于stack exchange,提问作者Serenity Emmanuel
相关产品推荐
相关产品推荐

