首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用availableCameras()发生MissingPluginException

调用availableCameras()发生MissingPluginException
EN

Stack Overflow用户
提问于 2022-11-02 07:54:20
回答 2查看 42关注 0票数 0

我们正在测试从一个带有摄像头的简单的颤振应用程序中调用本地代码。

但是,一个错误发生在我们调用availableCameras()时,这与我们的本机集成代码无关。

代码语言:javascript
运行
复制
MissingPluginException (MissingPluginException(No implementation found for method availableCameras on channel plugins.flutter.io/camera_android))
代码语言:javascript
运行
复制
DartPluginRegistrant.ensureInitialized();
WidgetsFlutterBinding.ensureInitialized();
var cameras = await availableCameras();

我们降低了相机的版本,但没有改进。当然,我们每次都做flutter cleanflutter pub get,并且重新启动Visual和Android。

pubspec.yaml

代码语言:javascript
运行
复制
dependencies:
  flutter:
    sdk: flutter

  camera: ^0.10.0+4
  # camera: 0.9.7+1
  path_provider: ^2.0.11
  path: ^1.8.2

# dependency_overrides:
  # camera_android: 0.9.7+1
  # camera_avfoundation: 0.9.7+1

我们正在测试它来调用本机代码。这个问题在我们试过之前并没有发生。所以我们认为这是一个可能的原因。我们怀疑一个重复的频道名称,并改变它包括我们的域名,但这并没有改善的东西。

代码语言:javascript
运行
复制
class AppInfo {
  static const MethodChannel _channel = MethodChannel('appInfo');

  static Future<String?> get appVersion async {
    final String? version = await _channel.invokeMethod('getAppVersion');
    return version;
  }
}

MainActivity.kt

代码语言:javascript
运行
复制
package com.xxx.xxxx

import android.content.pm.PackageManager
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import kotlinx.coroutines.ExperimentalCoroutinesApi

class MainActivity : FlutterActivity() {
    private val CHANNEL = "appInfo"

    @OptIn(ExperimentalCoroutinesApi::class)
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        MethodChannel(
            flutterEngine.dartExecutor.binaryMessenger,
            CHANNEL
        ).setMethodCallHandler { call, result ->
            if (call.method == "getAppVersion") {
                try {
                    val pInfo =
                        applicationContext.packageManager.getPackageInfo(context.packageName, 0)
                    var version = pInfo.versionName
                    result.success("${pInfo.versionName}");

                } catch (e: PackageManager.NameNotFoundException) {
                    e.printStackTrace()
                    result.notImplemented()
                }
            } else {
                result.notImplemented()
            }
        }
    }
}

iOS版本没有这个问题。

AppDelegate.swift

代码语言:javascript
运行
复制
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)

      let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
      let helloMethodChannel = FlutterMethodChannel(name: "appInfo",binaryMessenger: controller as! FlutterBinaryMessenger)
      helloMethodChannel.setMethodCallHandler({
        (call:FlutterMethodCall,result:FlutterResult) -> Void in

        switch call.method{
            case "getAppVersion":
                result(Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString") as? String)
            default:
               result("iOS" + UIDevice.current.systemVersion)
        }

      })

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

我们还能尝试什么?

颤振医生-v

代码语言:javascript
运行
复制
[✓] Flutter (Channel stable, 3.3.6, on macOS 12.6 21G115 darwin-x64, locale en-JP)
    • Flutter version 3.3.6 on channel stable at /Users/ganessa/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 6928314d50 (7 days ago), 2022-10-25 16:34:41 -0400
    • Engine revision 3ad69d7be3
    • Dart version 2.18.2
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/ganessa/src/android-sdks
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 13F100
    • CocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] VS Code (version 1.72.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.52.0

[✓] Connected device (4 available)
    • SHV43 (mobile)         • XXXXXXXXXXXXXXX           • android-arm64  • Android 9 (API 28)
    • iPhone SE2 MS (mobile) • XXXXXXXX-XXXXXXXXXXXXXXXX • ios            • iOS 15.6.1 19G82
    • macOS (desktop)        • macos                     • darwin-x64     • macOS 12.6 21G115 darwin-x64
    • Chrome (web)           • chrome                    • web-javascript • Google Chrome 107.0.5304.87

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-03 02:47:37

我无意中删除了GeneratedPluginRegistrant.registerWith(flutterEngine)。我们把它添加到configureFlutterEngine()中,我们的应用程序就像预期的那样工作。

相机包的版本也与此无关。

票数 0
EN

Stack Overflow用户

发布于 2022-11-03 03:30:24

转到Manifest文件,为相机示例添加正确的权限:

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

别忘了加

代码语言:javascript
运行
复制
android:requestLegacyExternalStorage="true"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74285917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档