2017-06-02 10 views
1

Ich versuche, eine gehostete PDF-Datei mit dem Standard-Android pdf viewer in meiner App mit dem folgenden CodeStarten Sie eine Android-Aktivität in Xamarin Forms?

  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); 

ich diesen Code in einem gebürtigen Projekt verwendet habe, um zu sehen, so dass ich weiß, dass es innerhalb eines Android funktioniert Aktivität. Gibt es für Xamarin Forms eine Möglichkeit, eine Android-Aktivität von einer Inhaltsseite aus zu starten, und umgekehrt?

Antwort

4

Sie können DependencyService verwenden diese Funktion zu implementieren:

INativePages in PCL:

public interface INativePages 
{ 
    void StartActivityInAndroid(); 
} 

Implementieren Sie die Schnittstelle in Xamarin.Android:

[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); 
     } 

    } 
} 

Starten Sie ein Android Activity in PCL:

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

eine Klasse für diese Funktion in einem Android-Projekt erstellen:

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

eine Schnittstelle in einem tragbaren Projekt erstellen

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

der Unterkunft um Ihre Ansichtsmodell hinzufügen, so dass Sie die Funktion aufrufen, können Sie bei Ihrem portable Projekt

public IPdfLauncher PdfLauncher {get;set;} 

Fügen Sie die Schnittstelle zu Ihrem Viewmodel Constructo r und übergeben Sie eine Instanz, die Sie in Ihrer Android-Hauptaktivität erstellen. Sie können nun Android-Code von Ihren xforms-Befehlen aus aufrufen. Wenn Sie jemals iOS oder UWP hinzufügen, können Sie diese Schnittstelle einfach in diesen Projekten implementieren und zur Laufzeit übergeben. Ich verwende ein Injection-Framework von MVVM, um die Erstellung dieser plattformspezifischen Implementierungen zu automatisieren, und ich würde empfehlen, dass Sie sich damit befassen, wenn Sie sich häufig dabei befinden.