微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐