Unity与Android的Back键冲突解决
上一篇的最后留下了两个问题
- Unity视图下横屏闪退
- Unity视图下Android无法响应back返回上一activity
对于第一个问题,应该是Unity横屏下视图的某些设置跟Android那边xml的屏幕横屏配置有冲突引起的。根据老师的提醒,在manifest的Unity视图的activity子节下加入了
android:configChanges="keyboardHidden|orientation|screenSize"
修改后的xml的部分内容:
<activity android:name=".MainActivity_unity"
android:configChanges="keyboardHidden|orientation|screenSize" />
问题就解决了。
下面着重来解决Unity与Android的Back键冲突的问题。
这问题在网上也能搜到很多的解决方法。大部分都是从android端入手的。其实既然现在的状况是Unity能响应到Back键而Android端不能响应。 那么也就是可以通过从Unity端入手,为Unity写一个Back键的响应事件不就行了吗
我们在Unity端生成一个脚本,写上以下代码,挂在EasyAR_startUp上
void Update () {
if(Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}
}
然后按上次的步骤导入到android工程当中。结果这次Unity视图是退出了。但是整一个app都退出了。达不到只退回上一个activity的效果。
这样,不妨试试让Unity回调Android的函数。
代码脚本如下:
void Update () {
if(Input.GetKey(KeyCode.Escape))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("onBackPressed");
}
}
我们这里让UnityPlayer回调 onBackPressed这一个函数。
于是我们把Unity重新生成一个android工程。
既然我们回调的UnityPlayer所在的 activity中的onBackPress函数,这样我们就在UnityPlayerNativeActivity重写一个onBackPress函数。
@Override public void onBackPressed(){
runOnUiThread(new Runnable() {
@Override
public void run() {
mUnityPlayer.quit();
}
});
super.onBackPressed();
}
参考内容:
http://www.ithao123.cn/content-10465610.html
加上这句话后,虽然可以退出,但是却会提示错误。经过一轮找资料之后,猜测可能是进程相关的问题。所以尝试着给Unity的activity的xml加上
android:process="e.unity"
就是完整的内容是:
<activity android:name=".MainActivity_unity"
android:process="e.unity"
android:configChanges="keyboardHidden|orientation|screenSize" />
就解决问题了