Qt for Android(八) —— QT 监听 Android 的返回键,或者其他Activity 事件

761 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。

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,如下:

在这里插入图片描述

将上面红框的内容修改为:com.qht.test.TestActivity。

现在构建你的APK并运行,按下 back 键看看效果吧

案例中只展示了监听返回键,其实我们可以通过自定义Activity干很多事情,比如屏幕信息的获取,Activity的一些设置等等。