在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 方案引用 here 或 here)
- 文本示例:
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
变量。
安卓
- 安装 android_intent发布
- 添加
CALL_PHONE
如果您正在使用android.intent.action.CALL
,则向用户显示其提示, 或直接使用android.intent.action.DIAL
未经许可。
这就是问题所在...我尝试了以下解决方案,但它仅适用于常规通话而不是视频通话
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 等应用程序、Whatsapp、Skype 等......这极易出错。如解释 here .
关于flutter - 打开视频通话flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832686/