tafuji's blog

C#, Xamarin, Azure DevOps を中心に書いています。

Xamarin.Essentials 入門 - #4 ランチャー

はじめに

Xamarin.Essentials のランチャーについて記載します。この API を利用することで、アプリケーションから URI を指定して他のアプリケーションを開くことができるようになります。なお、ブラウザーで Web サイトを開きたいときは、Xamarin.Essentials で提供される Browser API を利用します。

使ってみよう

使い方

Xamarin.Essentials のランチャーの機能は、Launcher クラスで提供されており、以下のことができます。

  • 他のアプリケーションを開く
    • URI を開くことができるかどうか
    • URI を開く
  • 他のアプリケーションにファイルを開いて表示するようにリクエストを送る

コードの例は、以下のようになります。

// URI を開くことができるかどうか
var supportsUri = await Launcher.CanOpenAsync("lyft://");

// URI を開く
await Launcher.OpenAsync("lyft://ridetype?id=lyft_line");

読んでみよう

Launcher のコードを読んでプラットフォーム固有の処理を見ていきます。

iOS

他のアプリケーションを開くことができるかのチェック

指定した URI を開くことができるかどうかは、UIApplication.SharedApplication を取得して UIApplicationCanOpenUrl を利用していることが分かります。

CanOpen-iOS

他のアプリケーションを開く

UIApplication.SharedApplication を取得して、UIApplicationOpenUrlAsync を利用して開いていることが分かります。

Open-iOS

ファイルを開くように要求を送る

UIDocumentInteractionControllerインスタンス生成して、現在表示されている ViewController UIDocumentInteractionControllerPresentOpenInMenu メソッドを利用してメニューを開いています。

OpenFile-iOS

Android

他のアプリケーションを開くことができるかのチェック

指定した URI を開くことができるかどうかは、暗黙的 Intent を利用して、PackageManager.QueryIntentActivities でチェックしています。

CanOpen-Android

他のアプリケーションを開く

暗黙的 Intent を作成して、Activity を開始します。Context の StartActivity メソッドを呼び出して、アプリを開いていることが分かります。

Open-Android

ファイルを開くように要求を送る

暗黙的 Intent を作成して、Activity を開始する点は、他のアプリケーションを開く場合と同じですが、アプリチューザを表示して、ファイルを開くアプリケーションを選択できるようにしています。

OpenFile-Android

UWP

他のアプリケーションを開くことができるかのチェック

指定した URI を開くことができるかどうかは、Windows.System.Launcher クラスで URI がサポートされるかをチェックしていることが分かります(QueryAppUriSupportAsync メソッド)

CanOpen-UWP

他のアプリケーションを開く

Windows.System.Launcher の LaunchUriAsync メソッドを使用して開いていることがわかります。

Open-UWP

ファイルを開くように要求を送る

Windows.System.Launcher の LaunchFileAsync メソッドを利用していることが分かります。

OpenFile-UWP

まとめ

  • Xamarin.Essentials のランチャーでは、以下の機能が提供される
    • URI を指定して他のアプリケーションを開く
    • 他のアプリケーションに対して、ファイルを開いて表示するようにリクエストを送る
  • 内部では、以下のネイティブ固有のAPI を利用している
    • iOS
      • URI 関連の処理
        • UIApplication.CanOpenUrl
        • UIApplication.OpenUrlAsync
      • ファイルを開く
        • UIDocumentInteractionController.PresentOpenInMenu
    • Android
      • URI 関連の処理
        • PackageManager.queryIntentActivities
        • Context.startActivity
      • ファイルを開く
        • URI 関連の処理を同じだが、アプリチューザを表示している
    • UWP
      • URI 関連の処理
        • Windows.System.Launcher の QueryAppUriSupportAsync メソッド
        • Windows.System.Launcher の LaunchUriAsync メソッド
      • ファイルを開く
        • Windows.System.Launcher の LaunchFileAsync メソッド

参考