ぴーさんログ

だいたいXamarin.Formsのブログ

Xamarin.Forms から Webブラウザで開く

Xamarin.FormsからWebブラウザアプリ(Chrome,Safari)でURLを開くサンプルです。DependencyServiceを利用します。

プロジェクトの作成

新規にソリューションを作成します。種類はBlank Apps (Xamarin.Forms Portable)、名前はOpenWebBrowserSampleにします。

PCLプロジェクト

OpenWebBrowserSampleプロジェクトにインターフェースIWebBrowserService.csを作成します。

using System;

namespace OpenWebBrowserSample.Services
{
    public interface IWebBrowserService
    {
        void Open(Uri uri);
    }
}

iOSプロジェクト

OpenWebBrowserSample.iOSプロジェクトにWebBrowserService.csを作成し、OpenWebBrowserSampleプロジェクトで定義したIWebBrowserServiceインターフェースを実装します。

using System;
using OpenWebBrowserSample.iOS;
using Xamarin.Forms;
using MonoTouch.UIKit;

[assembly: Dependency(typeof(WebBrowserService))]

namespace OpenWebBrowserSample.iOS
{
    public class WebBrowserService : IWebBrowserService
    {
        public void Open(Uri uri)
        {
            UIApplication.SharedApplication.OpenUrl (uri);
        }
    }
}

Androidプロジェクト

OpenWebBrowserSample.Androidプロジェクトも同様にWebBrowserService.csを作成し、OpenWebBrowserSampleプロジェクトで定義したIWebBrowserServiceインターフェースを実装します。

using System;
using Android.Content;
using OpenWebBrowserSample.Android;
using Xamarin.Forms;

[assembly: Dependency(typeof(WebBrowserService))]

namespace OpenWebBrowserSample.Android
{
    public class WebBrowserService : IWebBrowserService
    {
        public void Open (Uri uri)
        {
            Forms.Context.StartActivity (
                new Intent (Intent.ActionView,
                    global::Android.Net.Uri.Parse(uri.AbsoluteUri) ));
        }
    }
}

Forms.Contextからコンテキストを取得してStartActivityメソッドを実行します。インテントに含めるUriAndroid.Net.Uri型に変換する必要があります。

使用例

var uri = "http://xamarin.com/";
DependencyService.Get<IWebBrowserService> ().Open(new Uri(uri)); // open in WebBrowser