2014-09-09 1 views
0

'QCAR가 이미 초기화되었습니다'라는이 문제를 해결하는 방법을 알고 싶습니다. Unity에서 QCAR/Vuforia를 사용하는 Android 애플리케이션을 만들고 싶습니다. 앱은 Vuforia에 사용 된 활동을 포함하여 활동 사이를 횡단 할 수 있어야합니다. Android 용 Vuforia Unity - QCAR가 이미 초기화되었습니다.

는 이제 QCAR로 활동 호출 QCARActivity.java

내가 QCAR 한 번만 초기화 할 수 있다는 것을 알고, 그래서 우리는 한 번 QCARActivity.java에 액세스 할 때, 제대로 활동을로드 할 수있을 것입니다하자.

다음은 QCARActivity에 대한 코드의 조각 :

public class QCARActivity extends NativeActivity { 
    protected UnityPlayer mUnityPlayer; 
    protected QCARPlayerSharedActivity mQCARShared;   

    protected void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 

     getWindow().takeSurface(null); 
     setTheme(android.R.style.Theme_NoTitleBar_Fullscreen); 
     getWindow().setFormat(PixelFormat.RGB_565); 

     mUnityPlayer = new UnityPlayer(this); 

     if (mUnityPlayer.getSettings().getBoolean("hide_status_bar", true)) 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     final int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1); 
     final boolean trueColor8888 = false; 

     mQCARShared = new QCARPlayerSharedActivity(); 
     mQCARShared.onCreate(this, glesMode, 
      new QCARPlayerSharedActivity.IUnityInitializer() { 

       @Override 
       public void InitializeUnity() { 
        mUnityPlayer.init(glesMode, trueColor8888); 
        View playerView = mUnityPlayer.getView(); 
        setContentView(playerView); 
        playerView.requestFocus(); 
       } 
      }); 
    } 

    //Other methods such as onDestroy, onPause, onResume will also be implemented 
} 

하지만 우리는이 작업을 2 시간을 호출 할 때, 그것은로드 할 수 없습니다와 로그 캣에 'QCAR가 이미 초기화 된'이 표시됩니다.

QCAR이 이미 초기화되었다는 것을 표시하기 위해 할 수있는 방법이 있습니까? 이미 초기화 된 경우가 늘 QCAR를 초기화하고 올바르게 표시되도록

그리고 어떻게 다시 UnityPlayer을 열지?

누군가가이 사실을 깨달을 수 있기를 바랍니다. 코드 샘플은 많이 감사하겠습니다. 정말 고마워요.

참고 : 지금까지 난 단지 유니티를 통해 Vuforia에게 응용 프로그램을 만드는 방법을 알고, 내가 호환 자바 프로젝트를 이클립스에 압축을 해제 구글 프로젝트의 방법으로 수출을 사용했다. 나는 아직도 안드로이드로 프로그래밍 Vuforia에 익숙하지 않다.

답변

0

나는 그것을 스스로 알아 낸다. 이전에 코드 mQCARShared.onDestroy()QCARActivity.onDestroy() 안에 아래 코드와 같이 추가했습니다. 이것은 아마도 QCAR 리소스를 제거하고 죽일 것입니다.

protected void onDestroy() 
{ 
    mQCARShared.onDestroy(); 
    mUnityPlayer.quit(); 
    super.onDestroy(); 
} 

그러나 그 다음 내가 할 수있는 길을 잘못 내 QCARActivity 클래스의 의도 (startActivity(new Intent(GetApplicationContext(), MainActivity.class)))를 통해 다시 내 다른 활동을 호출합니다. 아마 QCARActivity을 파괴한다

onDestroy()가 호출되지 않았다. 올바른 방법은 finish()으로 전화하여 이전 활동으로 돌아가는 것인데, 이는 onDestroy()이라고도합니다. 이렇게하면 QCARActivity 클래스로 돌아갈 수 있으며 QCAR을 초기화 할 수 있습니다. 그러나

, 우리가 finish() 전화, mUnityPlayer.quit() 불려갑니다. 갑자기 이상한 행동이 일어난다. 이전 활동으로 돌아 가려고해도 앱이 즉시 종료됩니다. UnityPlayer.quit()있어서 내부가 호출되기 때문이다

이 이에 대신 활성을 죽이는 매니페스트 android:process을 추가하여 하나의 프로세스로 통일/Vuforia 작용을 갖는 활성함으로써 해결 될 수
Process.killProcess(Process.myPid()); //This code will kill the process that the app is running. 

전체 응용 프로그램. (예 : android:process="myProcessName").

자원이 밖에 사람을 도움이 Errors managing the UnityPlayer lifecycle in a native android application

희망.

+0

Alvin, 비슷한 문제가 있지만 이클립스 프로젝트에서 QCARActivity 파일을 찾지 못했습니다. 네가 도울 수 있으면 감사하겠습니다. 감사 – m0j1