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

一、前言

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

二、环境配置

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

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

Qt应用开发(安卓篇)——调用java代码,使用安卓api_第1张图片

         在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同级。

Qt应用开发(安卓篇)——调用java代码,使用安卓api_第2张图片

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

int maxAB(int a,int b) {
    QAndroidJniObject activity = QtAndroid::androidActivity();
    if (activity.isValid())
    {
        jint value = QAndroidJniObject::callStaticMethod("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 == "<

         进入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("com/MyJavaClass/MyJavaClass",
                                                   "settingBrightness",
                                                   "(Landroid/content/Context;I)V",
                                                   activity.object(),
                                                   brightness);
    }
}

你可能感兴趣的:(Qt5从入门到精通-应用开发,android,qt,c++,PC)