我正在尝试使用方法通道访问相机并拍照,但是如何从方法通道响应中获取文件

发布于 2025-01-10 04:40:52 字数 2268 浏览 0 评论 0原文

package com.example.unit_testing

import android.content.Intent
import android.graphics.Bitmap
import android.provider.MediaStore
import android.view.WindowManager.LayoutParams
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
  private val METHOD_CHANNEL_NAME = "com.jinto/method"
  private var methodChannel: MethodChannel? = null
  private val cameraRequest = 1888
  var imageView: Bitmap? = null

  override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
    window.addFlags(LayoutParams.FLAG_SECURE)
    super.configureFlutterEngine(flutterEngine)
    // Setup Channels
    setupChannels(flutterEngine.dartExecutor.binaryMessenger)
  }

  override fun onDestroy() {
    teardownChannels()
    super.onDestroy()
  }

  private fun setupChannels(messenger: BinaryMessenger) {
    methodChannel = MethodChannel(messenger, METHOD_CHANNEL_NAME)
    val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    methodChannel!!.setMethodCallHandler { call, result ->
      if (call.method == "cameraOn") {
        startActivityForResult(cameraIntent, cameraRequest)
        result.success(imageView)
      } else {
        result.notImplemented()
      }
    }
  }

  private fun teardownChannels() {
    methodChannel!!.setMethodCallHandler(null)
  }

  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == cameraRequest && resultCode == RESULT_OK) {
      val imageBitmap = data?.extras?.get("data") as Bitmap
      println("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww${imageBitmap.width}")
      imageView = imageBitmap
    }
  }
}

如果我们传递位图(imageView),它将不起作用,最初它不会重新调整任何内容,在相机服务开始没有获取任何数据后,

我如何将位图转换为文件并返回它,你能帮我解决这个问题

吗 ?是我从平台端获取数据的代码,

  Future<void> _checkAvailability() async {
    try {
      var apiImage = await methodChannel.invokeMethod("cameraOn");

      print('$apiImage');
    } on PlatformException catch (e) {
      print('error');
      print(e);
    }
  }
package com.example.unit_testing

import android.content.Intent
import android.graphics.Bitmap
import android.provider.MediaStore
import android.view.WindowManager.LayoutParams
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
  private val METHOD_CHANNEL_NAME = "com.jinto/method"
  private var methodChannel: MethodChannel? = null
  private val cameraRequest = 1888
  var imageView: Bitmap? = null

  override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
    window.addFlags(LayoutParams.FLAG_SECURE)
    super.configureFlutterEngine(flutterEngine)
    // Setup Channels
    setupChannels(flutterEngine.dartExecutor.binaryMessenger)
  }

  override fun onDestroy() {
    teardownChannels()
    super.onDestroy()
  }

  private fun setupChannels(messenger: BinaryMessenger) {
    methodChannel = MethodChannel(messenger, METHOD_CHANNEL_NAME)
    val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    methodChannel!!.setMethodCallHandler { call, result ->
      if (call.method == "cameraOn") {
        startActivityForResult(cameraIntent, cameraRequest)
        result.success(imageView)
      } else {
        result.notImplemented()
      }
    }
  }

  private fun teardownChannels() {
    methodChannel!!.setMethodCallHandler(null)
  }

  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == cameraRequest && resultCode == RESULT_OK) {
      val imageBitmap = data?.extras?.get("data") as Bitmap
      println("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww${imageBitmap.width}")
      imageView = imageBitmap
    }
  }
}

if we pass the bitmap(imageView) it won't work , initially it retune nothing , after the camera service started not getting any data

how can i convert the bitmap into file and return it, can you help me to solve this problem,

This is my code to get data from platform side,

  Future<void> _checkAvailability() async {
    try {
      var apiImage = await methodChannel.invokeMethod("cameraOn");

      print('$apiImage');
    } on PlatformException catch (e) {
      print('error');
      print(e);
    }
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文