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

相關文章
相關標籤/搜索