2017-06-02 31 views
1

、私は次のコードXamarinフォームでAndroidのアクティビティを開始しますか?

  var intent = new Intent(Intent.ActionView); 

      intent.SetDataAndType(Uri.Parse("http://sample/url.pdf"), "application/pdf"); 
      intent.SetFlags(ActivityFlags.ClearTop); 
      Android.Content.Context.StartActivity(intent); 

と私のアプリでは、デフォルトのAndroidのPDFビューアでホストされたPDFファイルを表示しようとしている私は、ネイティブのプロジェクトでこのコードを使用しているので、私はそれがAndroidの内部に動作することを知っていますアクティビティ。 Xamarinフォームの場合、コンテンツページからAndroidのアクティビティを開始する方法はありますか?

答えて

4

あなたはこの機能を実装するためにDependencyServiceを使用することができます。

INativePagesPCL中:PCLにAndroidのActivity

[assembly: Xamarin.Forms.Dependency(typeof(NativePages))] 
namespace PivotView.Droid 
{ 
    public class NativePages : INativePages 
    { 
     public NativePages() 
     { 
     } 

     public void StartAc() 
     { 
      var intent = new Intent(Forms.Context, typeof(YourActivity)); 
      Forms.Context.StartActivity(intent); 
     } 

    } 
} 

起動します:

public interface INativePages 
{ 
    void StartActivityInAndroid(); 
} 

Xamarin.Androidでインターフェイスを実装

private void Button_Clicked(object sender, EventArgs e) 
    { 
     Xamarin.Forms.DependencyService.Register<INativePages>(); 
     DependencyService.Get<INativePages>().StartAc(); 
    } 
0

アンドロイドプロジェクトでは、この機能のためのクラスを作成します。

public class PdfLauncher : IPdfLauncher 
{ 
    public void LaunchPdf(string url) 
    { 
     //implementation 
    } 
} 

あなたからの関数を呼び出すことができますので、あなたのviewmodelにプロパティを追加ポータブルプロジェクトに

public interface IPdfLauncher 
{ 
    void LaunchPdf(string url); 
} 

をインターフェースを作成します。ポータブルプロジェクト

viewmodelコンストラクターにインターフェイスを追加するあなたのアンドロイドの主な活動で作成したインスタンスを渡します。 xformsコマンドからアンドロイドコードを呼び出すことができます。iOSやUWPを追加した場合は、それらのプロジェクトでそのインターフェイスを実装して実行時に渡すだけで済みます。これらのプラットフォーム固有の実装の作成を自動化するために、MVVMのインジェクションフレームワークを使用しています。

関連する問題