flutter发送短信 打电话 打开连接 打开其余APP|8月更文挑战

url_launcher

用于在移动平台中启动URL的Flutter插件。 支持iOS和Android。 支持网络,电话,短信和电子邮件方案,以及打开其余app。html

主要功能有:java

支持的URL方案

launch method 方法采用包含URL的字符串参数。可使用许多不一样的URL方案格式化此URL。支持的URL方案取决于底层平台和已安装的应用程序。android

iOS和Android都支持的常见方案:ios

Scheme Action
http:<URL> , https:<URL>, 例如: http://flutter.io 在默认浏览器中打开URL
mailto:<email address>?subject=<subject>&body=<body>, 例如: mailto:smith@example.org?subject=News&body=New%20plugin 在默认电子邮件应用中为<电子邮件地址>建立电子邮件
tel:<phone number>, 例如: tel:+1 555 010 999 使用默认电话应用程序拨打<电话号码>的电话
sms:<phone number>, 例如: sms:5550101234 使用默认消息传递应用程序向<电话号码>发送短信

携带文本内容给指定号码发送短信:web

if (Platform.isAndroid) {
      const uri = 'sms:+86123456?body=hello world';
      await launch(uri);
    } else if (Platform.isIOS) {
      // iOS
      const uri = 'sms:123456&body=hello world';
      await launch(uri);
    }
复制代码

有关 iOSAndroid的更多详细信息,请参阅此处.浏览器

处理丢失的URL接收器

特定移动设备可能没法接收全部支持的URL方案。例如,平板电脑可能没有蜂窝无线电,所以不支持使用该sms方案启动URL ,或者设备可能没有电子邮件应用程序,所以不支持使用该email方案启动URL 。markdown

咱们建议canLaunch 在调用以前使用该方法检查支持哪些URL方案 launch。若是canLaunch方法返回false,做为最佳实践,咱们建议调整应用程序UI,以便永远不会触发不支持的URL; 例如,若是email不支持该方案,则能够更改已发送电子邮件的UI按钮,以使用该http方案后面的URL将用户重定向到网页。网络

浏览器与应用内处理

默认状况下,Android在处理URL时会打开浏览器。您能够传递forceWebView:true参数来告诉插件改成打开WebView。在iOS上,默认行为是打开应用程序中的全部Web URL。其余全部内容都被重定向到app处理程序。app

使用

添加依赖

要使用此插件,请在pubspec.yaml文件中添加url_launcher做为依赖项。async

dependencies:
  flutter:
    sdk: flutter
 
  # 添加如下代码.
  url_launcher: ^3.0.3
复制代码

安装依赖包

并执行 flutter packages get

导入依赖包

在须要用到的dart文件中导包: import 'package:url_launcher/url_launcher.dart';

举例:

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

void main() {
  runApp(new Scaffold(
    body: new Center(
      child: new RaisedButton(
        onPressed: _launchURL,
        child: new Text('Show Flutter homepage'),
      ),
    ),
  ));
}

 
_launchURL() async {
  const url = 'https://flutter.io';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}
复制代码

方法:

canLaunch(url)

可以检查连接是否有效 . 它会先检查url字符串是否为空再经过MethodChannel调用原生,并经过返回一个bool

launch(String urlString, { bool forceSafariVC,bool forceWebView,Brightness statusBarBrightness = Brightness.light})

解析指定的URL字符串并将其处理委托给底层平台。

打开其余App

关于打开连接,电话,短信和电子邮件等方式在上面表格中有写,使用方法跟例子同样,再也不赘述。 下面咱们看一下怎么打开手机中的其余App。

想要打开其余app,须要知道被打开app的scheme, 若是是本身的app,Android能够在Manifest中看到:

<intent-filter>必须单独写一个,不要和其余filter混用,不然无效。

<intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:host="li.zhuoyuan"
                    android:scheme="flutter" />
            </intent-filter>
复制代码

上面<data>标签中的就是咱们须要知道的url中的东西, 定义了scheme为flutter, host为li.zhuoyuan. 记住这两个字段,在咱们想打开这个app的地方须要。能够只定义scheme ,host为可选项。 那么,咱们须要的url组成部分就是:scheme://host 若是有host的话。

注意:这里scheme为必填,host、path为选填。选填内容能够不填,可是一旦填上了就必须所有彻底匹配才会成功拉起。

咱们须要打开的地方执行代码为:

void _openOtherApp()  async {
    const url = 'flutter://li.zhuoyuan'; //这个url就是由scheme和host组成的 :scheme://host
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }
复制代码

看下效果: 在这里插入图片描述

Android权限

Android11及以上: 在Manifest.xml中添加如下内容: 把你想要打开的app的包名添加在这个列表中, 详情查看:Android 11 中的软件包可见性

<queries>
        <package android:name="app包名" />
        <package android:name="com.facebook.katana" />
        <package android:name="ccom.instagram.android" />
        <package android:name="com.twitter.android" />
        <package android:name="com.whatsapp" />
    </queries>
复制代码
ios白名单

在ios上打开其余App有的须要设置白名单,在info.plist中添加 在这里插入图片描述

打开Facebook
static const String FACEBOOK_URL = 'https://www.facebook.com/617960732190357/';

  static String fbAppPage =
      Platform.isAndroid ? 'fb://page/617960732190357' : 'fb://profile/617960732190357';

复制代码
//deepLink:fbAppPage
//webLink:FACEBOOK_URL
        try {
          bool canLaunchB = await launch(deepLink, forceSafariVC: false);
          print(canLaunchB);

          if (!canLaunchB) {
            await launch(webLink, forceSafariVC: false);
          }
        } catch (e) {
          await launch(webLink, forceSafariVC: false);
        }
复制代码

首先须要构造两个URL。 一个用于启动APP,一个用于打开浏览器(主要用于没有安装App的时候)

  • 启动原生应用的URL

若是是针对一个页面,并且平台是Android,你须要FBUrl="fb://page/{id}"。 不然(好比iOS),你须要fbProtocolUrl="fb://profile/{id}"

  • 打开浏览器的URL

webUrl = "https://www.facebook.com/{id}",若是没有安装原生应用,启动webview的URL。 若是你喜欢的话,可使用webUrl = "https://www.facebook.com/reddit"或者相似的。参考

打开Instagram
static const String INSTAGRAM_URL = 'https://www.instagram.com/juno.horoscopes/';
  launch(INSTAGRAM_URL, forceSafariVC: false);
复制代码
打开Whatsapp

打开whatsapp

相关文章
相关标签/搜索