You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:25:28