一:使用 Application.Quit()

public void Update() {  

if(Input.GetKeyDown(KeyCode.Escape))
Application.Quit();
}

如此,Unity 就能响应 Android 的 Back 按钮了。

但是!这个方法存在的问题是,退出当前 UnityPlayerActivity 的同时,会退出整个程序。因此对于想返回上一个 Activity 并不有效。

二:添加一个后退的 button 执行 mUnityPlayer.quit()

在 UnityPlayerActivity 类,存在 mUnityPlayer.quit() 方法,通过退出 unityplayer 来结束 UnityPlayerActivity。 于是就考虑在安卓端设置一个后退按钮如图:

设置该按钮的监听并执行 mUnityPlayer.quit():

bckbtn = (Button) findViewById(R.id.navigate_back);
bckbtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
mUnityPlayer.quit();
}
});

这样就能退出当前的 UnityPlayerActivity 并返回前一个 Activity 。

三:使用 Unity 调用 Android 响应 Back 按钮

为了最终实现响应手机的系统按键返回前一个 Activity,在这使用到了 Unity 和 Android 的交互,通过 Unity 中的脚本响应系统按键,再调用 Android 函数实现返回上一个Activity。关于 Unity 调用 Android 的函数,可参考:http://www.xuanyusong.com/archives/667 。

在此,首先在 Unity 的 C# 脚本中添加如下代码响应 Back 按钮:

if (Input.GetKeyUp (KeyCode.Escape)) {
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
jo.Call ("onBackPressed");
}

在此先得到 AndroidJavaClass ,然后得到 AndroidjavaObject 就是当前 UnityPlayerActivity 的对象,拿到它的对象后调用jo.Call()参数表示调用 UnityPlayerActivity 类中的方法名称。
于是在 UnityPlayerActivity 下实现上面的 onBackPressed() 方法,并在该方法中实现 mUnityPlayer.quit(),那么问题就搞定了,Android 端 java 代码如下:

@Override
public void onBackPressed() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mUnityPlayer.quit();
}
});
super.onBackPressed();
}

这里重写了系统的 onBackPressed() 函数。

就此,最终实现了 Unity 响应手机的系统返回键,成功返回上一级 Activity。

Unity响应Android的返回键,退出当前Activity的更多相关文章

  1. Android双击返回键退出Activity的两种方法

    在开发应用程序的时候,有一种功能是非常常用到的,那就是迅速双击返回按钮,然后实现退出Activity的功能.本人在网上看了很多资料代码,总结起来,主要有两种比较好的方式.一种是开线程延时执行,一种是记 ...

  2. Android监听返回键、Home键+再按一次返回键退出应用

    Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME @Override public boolean onKeyDown( ...

  3. Android 应用按两下返回键退出应用程序

    在android应用开发中,有时候应用会用到按两下返回键退出应用的功能,今天介绍一下这个功能,直接上代码: @Override public boolean dispatchKeyEvent(KeyE ...

  4. 关于android app两次点击返回键退出的处理

    现在的android app在开发时,引入了两次点击返回键退出app的设计 为了避免用户误触,这个设计很人性化 中文网上社区有些同学贴了一些实现的例子,我觉得不是很好 代码如下 public bool ...

  5. React Native 适配Android物理返回键,实现连续两次点击退出

    一直使用iPhone作为测试机开发,提交给测试同事Android版本后发现很多适配问题,其中一个非常明显的是,弹出一个modal后,点击Android的返回键,modal不会消失,直接navigati ...

  6. android双击返回键退出程序

    今天给大家简单说一下,android双击返回键退出程序. @Override public boolean onKeyDown(int keyCode, KeyEvent event) {      ...

  7. ionic中android的返回键

    ionic中android的返回键 在ionic框架中已经注册了几个返回事件,分别是 view sideMenu modal actionSheet popup loading 他们的优先级分别是 v ...

  8. ionic 实现双击返回键退出应用功能

    ionic 实现双击返回键退出应用功能 keywords cordova,ngcordova,phonegap,ionic,双击,返回键,退出 例子 准备Toast插件,提示用,用户体验好点,不是必须 ...

  9. 点击返回键退出popupwindow的方法

    点击返回键退出popupwindow mPopupWindow.setFocusable(true); 这句非常重要,对背景不会有影响 mPopupWindow.setBackgroundDrawab ...

随机推荐

  1. angularjs中$watch监听model(对象属性、对象)变化

    昨天看了一下教学视频,学到了有关$watch的用法,想到最近做的一个页面中有个select下拉选项(select中的值变化了,则后面input中的值也跟着相应的变化),不知是否可以使用$watch来代 ...

  2. python学习笔记-(五)字符串&字典

    1.字符串操作 >>> name = ("my name is cc")#首字母大写 >>> print(name.capitalize()) ...

  3. Docker create image

    Dockerfile FROM java:8 MAINTAINER dudu ADD springts_1-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPO ...

  4. Java Web学习笔记-Servle生命周期

    Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期. 无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servl ...

  5. ecshop 后台模板设置-》设置模板

    ecshop后台“设置模板”出现问题 问题1:不能出现特殊符号  / <!-- TemplateBeginEditable name="5F生活数码/手机" -->&l ...

  6. WinForm使用皮肤图文步骤

    Winfrom本身样式提供的是Windows经典样式.. 不说多丑也绝称不上好看..有时为了用户体验就不得不需要想办法弄漂亮一点..皮肤包会是一个不错的选择.. 不废话了..开整.. 首先从网上下载免 ...

  7. C# 协变out 、逆变 in

    需求:泛型使用多态性 备注:协变逆变只能修饰 接口和委托 简单理解: 1.使用 in 修饰后为逆变,只能用作形参使用 ,参考 public delegate void Action<in T&g ...

  8. thinkphp的url地址区分大小写?

    在默认情况下: 在访问url地址的时候, 其中的 Action类名 即: 模块名称 是区分大小写的. (只有模块名, 即控制器名称) 可以根据设置 'URL_CASE_INSENSITIVE' =&g ...

  9. 导航菜单:jQuery粘性滚动导航栏效果

    粘性滚动是当导航在滚动过程中会占粘于浏览器上,达到方便网站页面浏览的效果,也是一种用户体验,下面我们看一下是怎么实现的: jQuery的 smint插件,也是一个导航菜单固定插件.当页滚动时,导航菜单 ...

  10. JS禁止WEB页面鼠标事件大全

    <!--禁止鼠标右键代码-->:<noscript><ifra:<scriptlanguage=javas:<!--:if(window.Event):doc ...