flutter - 打开视频通话flutter

标签 flutter dart

在flutter中打开原生手机上的视频通话功能还有解决方案吗?我看过 Agora 和其他人,但他们都没有按照我们需要的方式工作。

最佳答案

研究和想出这件事很烦人,就这样吧。这是我能想到的最好的方法,同时将高复杂性和付费 SDK 排除在解决方案之外。

首先,在发起视频通话之前,您必须区分这两个平台(iOS/Android)。由于这两个平台都没有统一的解决方案 AFAIK。

import 'dart:io';

if (Platform.isAndroid) {
  // Android Video Call
} else if (Platform.isIOS) {
  // iOS Video Call
}

iOS

  • 安装臭名昭著的url_launcher酒吧。
  • 您需要使用 FaceTime Links (请参阅完整的 iOS URL 方案引用 herehere)
  • 文本示例:facetime:14085551234 这会向 14085551234 发起 FaceTime 视频通话(您也使用电子邮件而不是电话号码)
import 'package:url_launcher/url_launcher.dart';

final String url = 'facetime:$phoneNumber';
if (await canLaunch(url)) {
  await launch(url);
} else {
  throw 'Could not launch $url';
}

这出奇的好。在这种情况下,您可以将 $phoneNumber 变量替换为 $userEmail 变量。

安卓

这就是问题所在...我尝试了以下解决方案,但它仅适用于常规通话而不是视频通话

import 'package:android_intent/android_intent.dart';


/// This acton calls the user directly via native phone app but requires `CALL_PHONE` permission in _AndroidManifest_.
final callIntentAction = 'android.intent.action.CALL';

/// This action displays native phone app with dial pad open showing the passed phone number intent's argument/extra. Does not require permissions as of Jan2020.
final dialIntentAction = 'android.intent.action.DIAL'; 

final intentAction = callIntentAction;

AndroidIntent intent = AndroidIntent(
    action: intentAction,
    data: Uri.encodeFull('tel:$phoneNumber'),
    arguments: {
        /// KEY: actual phone number to call [source](https://developer.android.com/reference/android/content/Intent.html#EXTRA_PHONE_NUMBER)
        /// VALUE: phoneNumber
        'android.intent.extra.PHONE_NUMBER': phoneNumber,

        /// KEY: [START_CALL_WITH_VIDEO_STATE](https://developer.android.com/reference/android/telecom/TelecomManager.html#EXTRA_START_CALL_WITH_VIDEO_STATE)
        /// VALUE: `3` implies [STATE_BIDIRECTIONAL](https://developer.android.com/reference/android/telecom/VideoProfile.html#STATE_BIDIRECTIONAL)
        'android.telecom.extra.START_CALL_WITH_VIDEO_STATE': '3',
    },
);
await intent.launch();

错误处理旁注:不幸的是 android_intent pub 没有错误处理或像 url_launcher 这样的“canOpen”方法。

您的问题仍然在于 Android 为 there's no native通用视频通话应用。

你有几个选择:

  • A. 您可以将第三方或您自己的视频通话 SDK/功能与您的应用相关联。 (如 flutter_webrtc agora_flutter_webrtc SightCall quickblox)。这样做的缺点是被调用者必须使用相同的软件,即您的应用程序必须安装在被调用者的设备上。这种方法更具前瞻性。请注意,我不隶属于我提到的任何图书馆。
  • B.您可以为 Android 创建一个平台方法来检查一组定义的意图,并检查已知视频通话应用程序的包名称及其所需的额外/参数。您必须一一检查意图列表,看看哪些适用并正确解决。对于 Google Duo 等应用程序WhatsappSkype 等......这极易出错。如解释 here .

关于flutter - 打开视频通话flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832686/

相关文章:

flutter - 在 Flutter 中从本地存储播放视频列表(内存不足错误)

dart - 如何从 HttpRequest.postFormData 的 catchError 的 _XMLHttpRequestProgressEvent 获取 HTTP 响应文本?

firebase - currentUser() 不是工作类型为什么我看到表达式没有计算为函数,所以它不能被调用

flutter - 找不到用于签名配置 'C:\...\android\app\<keystore.jks>' 的 keystore 文件 'release'

android-studio - 自动完成功能在带有 Flutter 的 Android Studio 中无法正常工作 - 第一个建议无关紧要

dart - Flutter - 更改应用栏的颜色不起作用

dart - 使用RegEx匹配Unicode字母

dart:如何在 iframe 中获取对文档对象的正确(类型化)引用

flutter - 编译时AudioService flutter 包错误

Flutter 应用程序可以在 iOS 设备/模拟器上进行调试,但通过 TestFlight 安装时会立即崩溃