我在Java中找到了几个解决方法,但是我没有找到如何在QML或Qt中完成它.我知道首先我应该设置WAKE_LOCK
权限AndroidManifest.xml
.我该怎么做才能在运行时打开和关闭Qt的屏幕锁定?
我在QT有一个Android应用程序.我想从一个按钮调用android设置.
我在Java中使用了这段代码:
public void usb(View v){
Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.DevelopmentSettings");
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用QT C++调用android设置?
我正在调用一个返回字符串的Java函数:
QAndroidJniObject obj = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString");
jstring jstr = obj.object<jstring>();
QString str = jstr; // This doesn't work, obviously, compiler-error.
Run Code Online (Sandbox Code Playgroud)
它返回一个jstring
,对我来说不是很有用.如何将其转换为a QString
,以便我可以在我的代码中使用它?
我有这个主窗口:
ApplicationWindow {
id : mainWindow
width: 640
height: 480
visible: true
Button{
text: "go back to form 1"
onClicked: {
form2.visible = true;
}
}
SecondForm{
id: form2
}
}
Run Code Online (Sandbox Code Playgroud)
第二个窗口是:
Window{
id: main
width: 640
height: 480
x: 0
y: 0
visible: false;
Button{
text: "go back to form 1"
onClicked: {
main.visible = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
桌面版本是好的,但在Android运行应用程序时,它的行为很奇怪!当我单击mainWindow中的按钮时会发生此错误:W/Qt ( 8903): (null):0 ((null)): QEGLPlatformContext::swapBuffers(): eglError: 12301, this: 0x6b46e7c0
虽然似乎调用了第二个窗体并且主窗口变为非活动状态.但第二个窗口不可见.虽然我看不到内部的按钮和按钮,当我触摸按钮预期位于的区域时,显然它可以工作,第二个窗口消失,然后第一个窗口再次激活.当我尝试通过单击android后退按钮返回mainWindow时,它会返回到mainWindow并发出此警告:W/Qt ( 8903): (null):0 ((null)): Can't find surface …
我正在开发一些将部署到 Android 操作系统的 Qt/QML 应用程序。现在,我需要模块,androidextras
但如果我按如下方式放入androidextras
我的.pro
文件中
QT += qml quick widgets sql core bluetooth printsupport androidextras
Run Code Online (Sandbox Code Playgroud)
然后我重新运行qmake
,出现以下错误:
项目错误:QT 中的未知模块:androidextras
我还尝试打开并运行示例项目Qt Notifier,但发生了同样的错误,因此我无法构建我的应用程序或示例,这应该是开箱即用的。
我使用KUbuntu 15.04
与gcc version 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
编译器和Desktop Qt 5.5.0 GCC 64bit
Qt的版本。我如何构建这个androidextras
模块?Android arm v7
正如您从维护工具屏幕截图中看到的那样,我已经安装了套件:
我用 重新编译了整个 Qt clear && ./configure -opensource -confirm-license -verbose -cups -plugin-sql-mysql -android-sdk /opt/android-sdk-linux -android-ndk /opt/android-ndk-r10d && make && make install
,在 QtCreator 中设置了 Qt 版本和 Qt 套件,更改了构建套件,但仍然弹出相同的错误。为什么?
我正在尝试使用QAndroidJniObject
。作为测试,我只调用2个Java函数,一个返回一个int,另一个返回一个字符串。
返回int时,此代码可正常编译:
jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其更改为调用返回字符串的函数,它将失败:
jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");
Run Code Online (Sandbox Code Playgroud)
它失败了
错误:对'_jstring * QAndroidJniObject :: callStaticMethod <_jstring *>(char const *,char const *)'的未定义引用
既然QAndroidJniObject::callStaticMethod
是模板函数,那么如何为一种类型定义它却为另一种类型定义它呢?
编辑:其实,我只是测试jobject
,jbyteArray
,jbooleanArray
,jbyte
,jboolean
,等,这是我发现了什么-只有整数类型,如jshort
,jint
,jlong
,jboolean
工作,同时字符串,数组和对象都给出一个undefined reference
错误。
在我的Qt基于Quick的应用程序中,其第一个目标平台是Android,我需要让用户共享图像.我的意思是Android上的一般分享行动,不仅限于任何特定的社交网络:
我确实找到了一些关于在Qt上分享FB和Twitter的线索,但他们直接使用Facebook/Twitter API,这不是我想要的.
从我到目前为止发现,似乎没有跨平台的方法来做这个,我的应用程序可能必须包含一些Java代码.如果这是正确的,那么目前在Android上编写特定于平台的代码的正确方法是什么?喜欢这个?
另一个想法是,可以通过在WebView中加载的网站中运行的Javascript来调用共享操作.由于网络应用程序具有共享功能,因此这应该是可能的,可能更具跨平台性.这看起来合情合理吗?
我正在使用 Qt 和 C++ 开发一个 android 应用程序。我的整个应用程序都有纵向。但是当我播放视频时,我想将方向更改为横向,视频结束后它应该再次更改为纵向。
所以问题是如何在适用于 Android 的 Qt/C++ 应用程序中将屏幕设置为横向或纵向模式。
我试图使用带有字符串参数的 QAndroidJniObject 来调用 Qt C++ 类中的 Java 静态函数。
这是我的 Java 类,具有我正在调用的函数
public class StatusBar{
public static void setStatusBarBackgroundColor(Activity activity,String colorPref) {
// My code
}
}
Run Code Online (Sandbox Code Playgroud)
我从 C++ 调用这个函数
void ECApplicationInfo::changeStatusBarColor(QString color)
{
QAndroidJniObject::callStaticMethod<void>(
"com/ezeecube/ezeesync/StatusBar",
"setStatusBarBackgroundColor",
"(Landroid/app/Activity;)V",
activity,color);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
错误:无法通过“...”活动传递非平凡可复制类型“QString”类型的对象,颜色);
我怎样才能摆脱这个错误