一、前言
在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);
}
}