Android11 flutter中webview调用系统拨号、发短信

Android11中有个坑

在Android下面的AndroidManifest.xml中需要额外声明一个权限

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

内嵌webview使用flutter_webview_plugin插件实现

方法

使用url_launcher插件,去官网下载之后,导包
import ‘package:url_launcher/url_launcher.dart’;

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  DateTime _lastPressedAt;
  final flutterWebviewPlugin = new FlutterWebviewPlugin();
  //监听URL的改变
  StreamSubscription<String> _onUrlChanged;

  @override
  void initState() {
    super.initState();
    //URL改变的监听
    _onUrlChanged = flutterWebviewPlugin.onUrlChanged.listen((url) async {
      print("监听到url改变 $url");
      if (url.startsWith("mailto") || url.startsWith("tel") || url.startsWith("sms")) {
        print("监听到打电话、信息、邮件等 $url");
        await flutterWebviewPlugin.stopLoading();
        await flutterWebviewPlugin.goBack();
        await canLaunch(url) ? await launch(url) : throw 'Could not launch $url';
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async{
      if(_lastPressedAt == null || (DateTime.now().difference(_lastPressedAt) > Duration(seconds: 1))){
        //两次点击间隔超过1秒,重新计时
        _lastPressedAt = DateTime.now();
        Fluttertoast.showToast(msg: '请再返回一次以退出程序');
        return false;
      }
      return true;
    },
      child: WebviewScaffold(
        url:"你的网址",
      ),
    );
  }
}

测试网页

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="format-detection" content="telephone=yes"/>
	<title>电话短信测试</title>
</head>
<body>
	<h2>电话短信测试</h2>
	<a href="tel:xxxxxxxxxxx">打电话</a>
	<a href="sms:xxxxxxxxxxx">发短信</a>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值