我想知道如何解决这个问题'QCAR已经初始化'。 假设我想创建使用在Unity中完成的QCAR / Vuforia的Android应用程序。 应用程序必须能够遍历活动,包括用于Vuforia的活动。
让我们用QCAR,QCARActivity.java
调用Activity我知道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
}
但是当我们第二次调用此活动时,它无法加载并且会在Logcat中显示“QCAR已经初始化”。
无论如何我们可以做到标记QCAR已经初始化了吗?
然后,如果它已经被初始化,如何再次打开UnityPlayer,以便它不会初始化QCAR并正确显示它?
我希望有人可以就此启发我。代码示例将非常受欢迎。 非常感谢你。
注意:到目前为止,我只知道如何通过Unity创建Vuforia应用程序,我使用export作为Google Project方法将其解压缩到Eclipse兼容的java项目。我还不熟悉直接用Android编程Vuforia。
答案 0 :(得分:0)
我自己弄清楚了。以前,我在mQCARShared.onDestroy()
中添加了代码QCARActivity.onDestroy()
,如下面的代码所示。这应该会取消任何QCAR资源并将其杀死。
protected void onDestroy ()
{
mQCARShared.onDestroy();
mUnityPlayer.quit();
super.onDestroy();
}
然后我在QCARActivity类中通过Intent(startActivity(new Intent(GetApplicationContext(), MainActivity.class))
)回调我的其他Activity,这是错误的方法。
据称应该破坏QCARActivity的onDestroy()
没有被调用。因此,正确的方法是调用finish()
将其返回到上一个活动,该活动也会调用onDestroy()
。通过这样做,我们可以回到QCARActivity类,它仍然可以初始化QCAR。
但是,当我们致电finish()
时,会调用mUnityPlayer.quit()
。然后突然发生一种奇怪的行为。即使您打算回到之前的活动,您的应用也会立即退出。
这是因为在UnityPlayer.quit()
方法内部,它调用:
Process.killProcess(Process.myPid()); //This code will kill the process that the app is running.
这可以通过将具有Unity / Vuforia的活动作为单个进程通过向清单添加android:process
来解决,从而杀死Activity而不是整个应用程序。 (例如android:process="myProcessName"
)。
资源: Errors managing the UnityPlayer lifecycle in a native android application
希望这可以帮助那里的任何人。