关于安卓v11以上版本和新版url_launcher无法打开浏览器的问题(安卓v11版本适配问题)
来源:6-10 如何打开第三方应用?【你期待的技能】
慕村0493939
2021-05-26
代码部分
//Future<void>? _launched声明在_LaunchPageState下
ElevatedButton(
onPressed: () => setState(() {
_launched = _launchInWebViewOrVC('https://www.baidu.com');
}),
child: Text('打开百度'),
)
Future<void> _launchInWebViewOrVC(String url) async {
bool res = await canLaunch(url);
if (res) {
await launch(
url,
forceSafariVC: true,
forceWebView: true,
headers: <String, String>{'my_header_key': 'my_header_value'},
);
} else {
throw 'Could not launch $url \n state: $res';
}
}
//报错
E/flutter (10175): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Could not launch https://www.baidu.com
E/flutter (10175): state: false
E/flutter (10175): #0 _LaunchPageState._launchInWebViewOrVC (package:flutter_test1/launch_page.dart:50:7)
E/flutter (10175): <asynchronous suspension>
E/flutter (10175):
通过手机内浏览器确保可以打开百度首页,
点进canLaunch(url)方法,注释里有
/// On Android (from API 30), [canLaunch] will return
false
when the required
/// visibility configuration is not provided in the AndroidManifest.xml file.
/// For more information see the Managing package visibility
/// article in the Android docs.
去安卓文档里发现AndroidManifest.xml里确实没有软件包可见的相关语句,但是网页里有一句话
系统会自动让部分应用对您的应用可见,以便您的应用可与其交互,而无需声明 元素。此行为有助于支持基本功能和常见用例。
根据提示在PC终端输入命令
adb shell dumpsys package queries
会出现大量系统默认可见的软件包(包括我安卓虚拟机上的chrome软件包,没发现其它浏览器,应该是默认浏览器),但是第一行有一个
system apps queryable: false
不太放心,所以在3个AndroidManifest.xml都写入
<queries>
<package android:name="com.android.chrome" />
</queries>
reload后仍然打不开
搞不定了orz
2回答
-
CrazyCodeBoy
2021-05-27
看着像是url_launcher的兼容问题,有没有用模拟器和真机都试一下呢
00 -
慕村0493939
提问者
2021-05-26
电脑重启之后就能用了,怪
00
相似问题
回答 3
回答 2
回答 2
回答 4
回答 2