Qt应用开发(安卓篇)——调用java代码,使用安卓api

news2024/11/18 1:32:36

一、前言

        在Qt on Android开发的时候,它不像在嵌入式linux,几乎全部的操作都是可以通过文件来完成。很多场景下的功能都需要使用安卓的API去实现,开发人员需要通过这些API进行编程,无需访问源码,或者理解内部的机制。比如访问摄像头,设置背光,设置休眠时间等等。

二、环境配置

        第一步,我们需要在头文件引用 androidextras

        接下来,我们在android路径下新建一个src的文件夹,里面在建一个com的文件夹,新建一个java文件放在里,这里的src文件夹名称是有说法的,名字不能变,java文件一定要在里面,否则不会编译。

         在java文件里面编辑如下代码,package表示包路径

package com.MyJavaClass;
import org.qtproject.qt5.android.bindings.QtActivity;

public class MyJavaClass{
    public static int maxAB(int a,int b)
    {
        try
        {
            if(a >b)
                return a;
            else
                return b;
        }
        catch (Exception ex)
        {
            System.out.println("maxAB-failed!");
        }
    }

}

        修改AndroidManifest.xml文件,添加一个receiver,要和activity同级。

        添加C++代码,使用jni调用java代码,下一章我们会详细介绍jni的用法。

int maxAB(int a,int b) {
    QAndroidJniObject activity = QtAndroid::androidActivity();
    if (activity.isValid())
    {
        jint value = QAndroidJniObject::callStaticMethod<jint>("com/MyJavaClass/MyJavaClass",
                                                   "maxAB",
                                                   "(II)I",
                                                   a,
                                                   b);

        return value;
    }
}
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    qDebug()<<"10 and 5 max is == "<<maxAB(10,5);
    return app.exec();
}

         进入shell,logcat查看日志,可以看到输出正确,撒花!

 

三、修改屏幕亮度

        添加java代码

    /*设置背光模式*/
    public static void settingBrightnessMode(Context context,int mode)
    {
        try
        {
            Settings.System.putInt(context.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,mode);
        }
        catch (Exception ex)
        {
            System.out.println("settingBrightnessMode-failed!");
        }
    }
    /*设置背光亮度*/
    public static void settingBrightness(Context context,int brightness)
    {
        try
        {
            settingBrightnessMode(context,Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
            Settings.System.putInt(context.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS,brightness);
            System.out.println("settingBrightness-Success!");
        }
        catch (Exception ex)
        {
            System.out.println("settingBrightness-failed!");
        }
    }

        添加C++代码

void setScreenBrightness(int brightness) {
    QAndroidJniObject activity = QtAndroid::androidActivity();
    if (activity.isValid())
    {
        brightness = ((float)brightness/100)*255;
        QAndroidJniObject::callStaticMethod<void>("com/MyJavaClass/MyJavaClass",
                                                   "settingBrightness",
                                                   "(Landroid/content/Context;I)V",
                                                   activity.object<jobject>(),
                                                   brightness);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1413752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP报文格式

IP报文格式 报文格式 图1 IP头格式 表1 IP头字段解释 字段长度含义Version4比特 4&#xff1a;表示为IPV4&#xff1b;6&#xff1a;表示为IPV6。IHL4比特首部长度&#xff0c;如果不带Option字段&#xff0c;则为20&#xff0c;最长为60&#xff0c;该值限制了记录路由选项。…

阅读go语言工具源码系列之gopacket(谷歌出品)----第二集 layers-巧妙的抽象与无聊的协议包

上一集中我们讲到了wpcap.dll的go封装方法&#xff0c;对于linux系统下libpcap的go封装采用的是常用的cgo方式&#xff0c;想了解的可以看看pcap文件夹中的pcap_unix.go。 我们得到了wpcap.dll的go调用&#xff0c;就可以利用它来进行列举所有网络设备&#xff0c;例如以下代码…

docker容器生命周期管理命令

文章目录 前言1、docker create2、docker run2.1、常用选项2.2、系统2.3、网络2.4、健康检查 3、docker start/stop/restart4、docker kill5、docker rm6、docker pause/unpause总结 前言 在云原生时代&#xff0c;Docker已成为必不可少的容器管理工具。通过掌握Docker常用的容…

派网AX50C做多宽带路由和核心交换机配置实战教程

接近300办公人员的工厂需要网络升级&#xff0c;我规划设计和部署实施了以下方案&#xff0c;同样是简约不简单&#xff0c;在满足性能需求稳定性的前提下&#xff0c;既有经济性&#xff0c;又有安全性。 派网做路由器&#xff0c;刚好开启默认防病毒策略&#xff0c;省下来一…

【QT+QGIS跨平台编译】之十一:【libzip+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libzip介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libzip介绍 libzip是一个开源C库,用于读取,创建和修改zip文件。 libzip可以从数据缓冲区,文件或直接从其他zip归档文件直接复制的压缩数据中添加文件。在不关闭存档的情况下所做的更改可以还原…

TCP 状态转换以及半关闭

TCP 状态转换&#xff1a; 上图中还没有进行握手的时候状态是关闭的。 三次握手状态的改变&#xff1a; 客户端发起握手。 调用 connect() 函数时状态转化为&#xff1a;SYN_SENT。调用 listen() 函数时状态转换为&#xff1a;LISTEN。ESTABLISHED是被连接的状态。 四次挥手…

林浩然的哲学奇遇记:与罗素一起穿越西方哲学史

林浩然的哲学奇遇记&#xff1a;与罗素一起穿越西方哲学史 The Philosophical Adventures of Lin Haoran: Journeying Through Western Philosophy with Russell 在一个阳光灿烂的早晨&#xff0c;林浩然同学迎着微风&#xff0c;拿着一本厚重的罗素名著《西方哲学史》&#xf…

了解维特比算法:通信系统和自然语言处理中解码的基石

一、介绍 在数字通信和信号处理领域&#xff0c;维特比算法是一种革命性的纠错和解码方法。该算法以 1967 年推出的 Andrew Viterbi 的名字命名&#xff0c;已成为数字通信和自然语言处理领域的基础。本文旨在深入研究维特比算法的复杂性&#xff0c;探讨其理论基础、实际应用以…

通俗易懂理解小波池化以及WaveCNet网络模型

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 github代码&#xff1a;WaveCNet 小波变换和曲波变换用于池化层 通俗易懂理解小波变换(Wavelet Transform) 二、相关介绍 关于小波变换的详细介绍…

C#,数据检索算法之插值搜索(Interpolation Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文提供插值搜索&#xff08;Interpolation Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.…

极限【高数笔记】

【分类】分为了两大类&#xff0c;一个是数列的极限&#xff0c;一个是函数的极限 【数列的极限】 1.定义&#xff1a; 简单来讲&#xff0c;就是&#xff0c;当n无限趋近于无穷时&#xff0c;数列{an}无限趋近一个常数A&#xff0c;此时&#xff0c;常数A就是它们此时情况下的…

三极管实际电路设计

上图电路有个致命缺陷。那就是Q2正常我们是用NPN三极管。而上图用了PNP。导致MOS管高低电平都无法关闭。 解决方法&#xff1a; 把R2减小为200欧、或者330欧姆。 &#xff08;因为MOS打开需要压差&#xff0c;把SG端压差减小到规定以下就可以关闭&#xff09;。 同时增大R1为2…

RustDesk私有化部署,自建远程桌面搭建教程

以linux操作系统为例&#xff1a; 解压安装 # 使用wget进行下载1.1.8-2版本&#xff08;最新版本可以看上述发布地址&#xff09; wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.8-2/rustdesk-server-linux-amd64.zip # 使用unzip解压 unzip rust…

防火墙综合实验

实验需求&#xff1a; 1、生产区在工作时间内可以访问服务器区&#xff0c;仅可以访问http服务器。 2、办公区全天可以访问服务器区&#xff0c;其中&#xff0c;10.0.2.20可以访问FTP服务器和HTTP服务器&#xff0c;10.0.2.10仅可以ping通10.0.3.10。 3、办公区在访问服务器…

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models导读

通过生成一系列中间推理步骤&#xff08;即“思维链”&#xff09;显著提高大型语言模型进行复杂推理的能力 这篇论文探讨了如何通过生成一系列中间推理步骤&#xff08;即“思维链”&#xff09;显著提高大型语言模型进行复杂推理的能力。研究人员使用一种简单的方法——思维…

BAT学习笔记:常用指令详解及图示

文章目录 一、 &#xff08;关闭本行命令回显&#xff09;详解及图示二、echo off&#xff08; 关闭命令回显&#xff09;详解及图示三、%VAR_NAME% (取变量值&#xff09;详解四、set (设置变量&#xff09;详解及图示五、if (条件判断) 详解及图示六、not (条件取反&#xff…

Elasticsearch8.11集群部署

集群就是多个node统一对外提供服务&#xff0c;避免单机故障带来的服务中断&#xff0c;保证了服务的高可用&#xff0c;也因为多台节点协同运作&#xff0c;提高了集群服务的计算能力和吞吐量。ES是一个去中心化的集群&#xff0c;操作一个节点和操作一个集群是一样的&#xf…

podman+centos和docker+alpine中作性能对比遇到的问题及解决

1.dockeralpine中遇到这个问题 这是由于缺少相关的配置和依赖造成的 通过以下命令在alpine中安装相关配置 apk add --no-cache build-base cairo-dev cairo cairo-tools jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev 2.alpine中python找…

Likeshop多商户商城源码系统,支持二开

在电商行业高速发展的当下&#xff0c;拥有一套功能强大、易于操作的开源商城系统至关重要。Likeshop多商户商城系统正是这样一款集H5、小程序、独立APP于一体的开源电商解决方案&#xff0c;助力商家实现智能营销。 一、产品简介 Likeshop多商户商城系统为商家提供了丰富的营…

使用代码取大量2*2像素图片各通道均值,存于Excel文件中。

任务是取下图RGB各个通道的均值及标签&#xff08;R, G&#xff0c;B&#xff0c;Label&#xff09;,其中标签由图片存放的文件夹标识。由于2*2像素图片较多&#xff0c;所以将结果放置于Excel表格中&#xff0c;之后使用SVM对他们进行分类。 from PIL import Image import os …