Flutter开发之Android物理按键返回

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter开发之Android物理按键返回相关的知识,希望对你有一定的参考价值。

参考技术A 在flutter开发过程中,发现android手机在App首页点击物理返回按钮时,App会退出并且再次点开App时会重新启动,这代表了上次的退出直接杀死了App,和我们平常的退到手机桌面不同,所以开发了一个单独插件来处理这种情况。

使用步骤如下:
1、pubspec.yaml文件中引入依赖

2、引用插件

3、使用插件来退出App到桌面,并且保持App后台运行

可根据实际情况在_onWillPop方法中处理相关逻辑,比如连续两次点击物理返回按钮才退出到桌面等。

android物理键

请问一下使用基本android系统(未经深度定制)的手机应该有几个物理按键?G1 G2……G6 G7各自都有几个物理按键?都是干什么用的?

* Android常用的物理按键及其触发事件
* KEYCODE_POWER 电源键
* KEYCODE_MENU 菜单键
* KEYCODE_BACK 后退键
* KEYCODE_HOME Home键
* KEYCODE_CAMERA 相机键
* KEYCODE_SEARCH 查找键
* KEYCODE_VOLUME_UP 音量键+
* KEYCODE_VOLUME_DOWN 音量键-
* KEYCODE_VOLUME_MUTE 静音
* 方向键
* KEYCODE_DPAD_CENTER
* KEYCODE_DPAD_UP
* KEYCODE_DPAD_DOWN
* KEYCODE_DPAD_LEFT
* KEYCODE_DPAD_RIGHT
* 键盘键
* 数字0~9 字母A~Z
* KEYCODE_0 ~ KEYCODE_9
* KEYCODE_A ~ KEYCODE_Z
* 提供的回调方法有
* onKeyUp()、OnKeyDown()、onKeyLongPress()
*
* @author Administrator
*
*/
public class MainActivity extends Activity

private Button btnClose = null;

@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnClose = (Button) findViewById(R.id.btnClose);
btnClose.setOnClickListener(new closelistener());


class closelistener implements OnClickListener

@Override
public void onClick(View v)
// TODO Auto-generated method stub
finish();




/**
* 重写onKeyDown方法可以拦截系统默认的处理
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK)
Toast.makeText(this, "后退键", Toast.LENGTH_SHORT).show();
return true;
else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP)
Toast.makeText(this, "声音+", Toast.LENGTH_SHORT).show();
return false;
else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
Toast.makeText(this, "声音-", Toast.LENGTH_SHORT).show();
return false;
else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
Toast.makeText(this, "静音", Toast.LENGTH_SHORT).show();
return false;
else if (keyCode == KeyEvent.KEYCODE_HOME)
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
return true;

return super.onKeyDown(keyCode, event);


/**
* 重写onTouchEvent方法可以处理Touch事件
*/
@Override
public boolean onTouchEvent(MotionEvent event)
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_MOVE)
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
else if (event.getAction() == MotionEvent.ACTION_UP)
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
else if (event.getAction() == MotionEvent.ACTION_DOWN)
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();

return super.onTouchEvent(event);




更多的事件可以参考SDK文档的MotionEvent、KeyEvent两个类,在KeyEvent中如果处理了KeyEvent.KEYCODE_BACK事件,那就不会执行默认的操作,比如收到KeyEvent.KEYCODE_BACK事件后默认是退出,如果直接return那就不会处理退出了。
参考技术A 一般都是4个物理键。系统本身要求至少2个。

或导航键没算。)

有【 菜单,返回,搜索,小房子。】
菜单和返回好像是必须的。但是也可以做成不要物理键的。
参考技术B 一般都是4个物理键。系统本身要求至少2个。
(轨迹球或导航键没算。)

有【 菜单,返回,搜索,小房子。】
菜单和返回好像是必须的。但是也可以做成不要物理键的。本回答被提问者采纳

以上是关于Flutter开发之Android物理按键返回的主要内容,如果未能解决你的问题,请参考以下文章

Android中点击物理返回按键(再按一次退出程序)

Flutter混合开发:Android中如何启动Flutter

求教Android去掉虚拟按键全屏显示的方法

Flutter - 监听硬件按键。防止默认行为,android

初识flutter

在交互细节上,Android 与 iOS 都有哪些区别