这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。
Qt for Android(一) —— QT 中如何调用android方法
Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)
Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的 c方法(设置音量、亮度等)
背景
QT 监听 Android设备的返回键有两种方式,一种是在 QT 层监听,第二种是在 Android代码中监听。既然有了第一种方案,为什么还要使用第二种方案?因为之前我们的项目碰到过我们的QT程序监听了back键,想退出进程,事件是监听到了,但是程序怎么都退不掉,因此才有了第二种方案。
方案一
在主 QWidget 中重写下面两个函数:
virtual void keyPressEvent(QKeyEvent *) override;
virtual void keyreleaseEvent(QKeyEvent *) override;
void Widget::keyPressEvent(QKeyEvent *e)
{
switch(e->key())
{
case Qt::Key_Back:
{
qDebug() << "QHT Widget keyPressEvent::Key_Back";
e->accept();
}
break;
default:
QWidget::keyPressEvent(e);
break;
}
}
void Widget::keyreleaseEvent(QKeyEvent *e)
{
switch(e->key())
{
case Qt::Key_Back:
{
qDebug() << "QHT Widget keyreleaseEvent::Key_Back";
e->accept();
#endif
return;
}
break;
default:
QWidget::keyPressEvent(e);
break;
}
}
方案二
方案二需要我们自定了一个 Activity,在 文章六中我提到了这个说法。有了这个自定义的Activity类,我们可以偷偷干很多事哦。
第一步:
基于文章二,在com.qht.test包下,新建一个TestActivity.java类,为了避免错误,可以在android studio下建一个默认的 Activity 拿过来用。
然后在这个Activity中监听返回键,如下:
package com.qht.test;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
public class TestActivity extends org.qtproject.qt5.android.bindings.QtActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* 监听Back键按下事件,方法2:
* 注意:
* 返回值表示:是否能完全处理该事件
* 在此处返回false,所以会继续传播该事件.
* 在具体项目中此处的返回值视情况而定.
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
System.out.println("按下了back键 onKeyDown() System.exit(0)");
System.exit(0);
return false;
}else {
return super.onKeyDown(keyCode, event);
}
}
}
第二步:
打开AndroidManifest.xml
文件,修改我们要启动的Activity为我们新建的Activity,如下:
现在构建你的APK并运行,按下 back 键看看效果吧
案例中只展示了监听返回键,其实我们可以通过自定义Activity干很多事情,比如屏幕信息的获取,Activity的一些设置等等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。