是否存在一种解决方案,可以在本地电话上快速打开视频通话功能?我看过Agora和其他产品,但它们都无法按照我们需要的方式工作。
答案 0 :(得分:6)
这很烦人,研究起来并想出了办法。这是我能想到的最好的方法,同时又保持了解决方案之外的高复杂性和付费SDK。
首先,您必须在发起视频通话之前区分两个平台(iOS / Android)。由于两种平台AFAIK都没有统一的解决方案。
import 'dart:io';
if (Platform.isAndroid) {
// Android Video Call
} else if (Platform.isIOS) {
// iOS Video Call
}
facetime:14085551234
将启动FaceTime视频通话至 14085551234 (您也使用电子邮件代替电话号码)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
变量。
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通用视频通话应用。
您有两种选择: