2017-10-12 6 views
2

저는 Xamarin을 사용하여 교차 플랫폼 AR 응용 프로그램을 개발하고 있습니다. Wikitude 인스턴트 추적을 사용하고 있습니다.xikarin 양식에서 wikitude plugin을 사용하는 방법은 무엇입니까?

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

} 

내 위키 튜드 (Wikitude) 활동이지만 n은 ot 호출
public override void Update (RecognizedTarget [] p0) 방법 .... 내가 여기서 뭘 잘못하고 있니?

+0

문제가 발생한 부분까지 코드를 좁혀주십시오. 모든 코드를 버리고 누군가가 당신에게 답을 줄 것을 기대하는 것은 효과가 없습니다. – Cheesebaron

+0

안녕하세요 @ Cheesebaron 나는 코드를 좁히기 위해 ... 내 문제는 ameraFrameAvailable (프레임 p0)에 콜백을 얻지 못하고있다. 나는 첫 번째 코드 스 니펫에 플러그인을 등록했다. – pritam001

답변

1

나는 문제가 "RegisterPlugin"을 잘못된 메서드로 호출하고 있다고 생각하는데, 당신은 activity 메소드를 호출하는주기가 다르다는 것을 알기 때문에 activity의 "OnPostCreate"메소드에서 호출해야한다. 코드 아래 시도하고 나에게 결과를 알려 :

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

변수 이름을 변경하는 것이 좋습니다.

+0

안녕하세요 @ 해밋입니다. :) 고마워요. ... 나는 지금 당신이 그것을 해결했을 가능성이 한가지있다 ... 나는 그것이 작동하는 이미지를 포착하려고 노력하고있다 .... 그러나 나는 당신과 같은 문제가있다 .... 제발 첨부 파일을 동일하게하십시오 – pritam001

+0

답을 수락하십시오 ... 이미지 https://ibb.co/n3QDd6에 대한 링크를 찾으십시오 – pritam001

+0

여기 내 코드는 https://gist.github.com/pritasam/d3f3614ea9cba4e8e8f4725c248a4d00입니다. – pritam001