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

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

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的一些设置等等。

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...