关于安卓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的兼容问题,有没有用模拟器和真机都试一下呢

0
0

慕村0493939

提问者

2021-05-26

电脑重启之后就能用了,怪

0
0

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程