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>