2017-10-12 7 views
2

J'utilise Xamarin pour développer une application AR multi-plateforme. J'utilise le suivi instantané de Wikitude.Comment utiliser le plugin wikitude sous forme de xamarin?

Je suis capable de démarrer l'activité Wikitude et capable de lancer le suivi instantané ... Maintenant, je veux capturer l'image haute résolution tout en poursuivant ... J'essaie de construire le plugin pour obtenir le cadre, puis le convertir au flux d'images

Son activité est mon Wikitude

namespace XamarinExample.Droid 
    { 
     [Activity(Label = "WikitudeActivity")] 
     public class WikitudeActivity : Activity, ArchitectView.IArchitectUrlListener 
     { 
      ArchitectView architectView; 
      string worldUrl; 

      protected override void OnCreate(Bundle bundle) 
      { 
       base.OnCreate(bundle); 

       SetContentView(Resource.Layout.sample_cam); 

       Title = Intent.GetStringExtra("id"); 

       worldUrl = "Wikitude" + File.Separator + Intent.GetStringExtra("id") + File.Separator + "index.html"; 

       architectView = FindViewById<ArchitectView>(Resource.Id.architectView); 

       ArchitectStartupConfiguration startupConfiguration = new ArchitectStartupConfiguration(); 
       startupConfiguration.setLicenseKey(Constants.WIKITUDE_SDK_KEY); 
       startupConfiguration.setFeatures(ArchitectStartupConfiguration.Features.ImageTracking); 
       startupConfiguration.setCameraResolution(CameraSettings.CameraResolution.Auto); 



/////////////////////////////// Register Plugin//////////////////////////////////// 


       var plugins = new Plugin01("test"); 
       architectView.RegisterPlugin(plugins); 

       architectView.OnCreate(startupConfiguration); 
       architectView.RegisterUrlListener(this); 
      } 

    } 

My Plugin code taken from

public class Plugin01 : Com.Wikitude.Common.Plugins.Plugin 
{ 
    public Plugin01(string p0) : base(p0) 
    { 

    }  
    Frame currentFrame = null; 
    public override void CameraFrameAvailable(Frame p0) 
    { 
    System.Diagnostics.Debug.WriteLine("AVAILABLE FRAME"); 
     try 
     { 
      var data = p0.GetData(); 
      currentFrame = p0; 
     } 
     catch (System.Exception ex) { } 
    } 

    public override void Update(RecognizedTarget[] p0) 
    { 
      System.Diagnostics.Debug.WriteLine("AVAILABLE FRAME"); 
     if (p0 != null) 
     { 
      if (currentFrame != null) 
      { 
       // ConvertYuvToJpeg(currentFrame, p0[0]); 
      } 
     } 
    } 

} 

J'ai enregistré les plug-ins, mais il est n ot
public override void Mise à jour (RecognizedTarget [] p0) Méthode ... Qu'est-ce que je fais de mal ici?

+0

Veuillez rétrécir le code là où vous avez votre problème. Le simple fait de jeter tout votre code et d'attendre que quelqu'un vous donne une réponse ne fonctionnera pas. – Cheesebaron

+0

Salut @Cheesebaron J'ai affiner le code ... Mon problème est que je ne reçois pas de rappel sur ameraFrameAvailable (Frame p0) ..J'ai enregistré le plugin en premier extrait de code – pritam001

Répondre

1

Je pense que le problème appelle "RegisterPlugin" dans la mauvaise méthode, car vous savez que le cycle des méthodes d'activité d'appel est différent. Vous devriez l'appeler dans la méthode d'activité "OnPostCreate". essayer ci-dessous le code et laissez-moi savoir le résultat:

protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     try 
     { 
      SetContentView(Resource.Layout.Main); 
      architectView = FindViewById<ArchitectView>(Resource.Id.architectView); 
      var config = new ArchitectStartupConfiguration(); 
      config.setLicenseKey(WIKITUDE_SDK_KEY); 
      architectView.OnCreate(config); 
     } 
     catch (Exception ex) { Toast.MakeText(this, ex.ToString(), ToastLength.Long); } 
    } 

protected override void OnPostCreate(Bundle savedInstanceState) 
    { 
     base.OnPostCreate(savedInstanceState); 
     if (architectView != null) 
      architectView.OnPostCreate(); 
     try 
     { 
      try 
      { 
       string url = string.Format(@"file:///android_asset/01_ImageRecognition_1_ImageOnTarget/index.html"); 
       architectView.Load(url); 
       Plugin01 cardPlugin = new Plugin01("com.plugin.dpiar"); 
       architectView.RegisterPlugin(cardPlugin); 
      } 
      catch (Exception ex) { } 
     } 
     catch (Exception ex) { Toast.MakeText(this, ex.ToString(), ToastLength.Long); } 
    } 

envisager de changer le nom des variables.

+0

Salut @hamid ça marche :) merci. ... J'ai une question maintenant probablement vous l'avez résolu ... J'essaie de capturer l'image cela fonctionne .... Mais j'ai un même problème que vous aviez .... S'il vous plaît ifnd la pièce jointe pour le même – pritam001

+0

I Acceptez votre réponse ... S'il vous plaît trouver le lien pour l'image https://ibb.co/n3QDd6 – pritam001

+0

Voici mon code https://gist.github.com/pritasam/d3f3614ea9cba4e8e8f4725c248a4d00 – pritam001