新的Qt Android extra有一个新功能。 QtAndroid :: startActivity
我不知道如何在C ++代码中设置fisrt参数。有人可以举个例子吗?非常感谢你。
答案 0 :(得分:0)
您必须构建一个包含Android“ Intent”对象的JNI对象。在Java中创建一个Intent对象相当容易,但是我不知道如何从C ++实现。
因此,我的解决方案是将一个.java文件添加到我的Qt项目中,并在Java中创建一个辅助函数,该函数将为我生成并返回一个Android Intent对象:
package com.k9spud.FileBrowser;
import java.io.File;
import android.net.Uri;
import android.content.Intent;
public class AndroidAction
{
public static Intent openFile(String filePath, String fileType)
{
File f = new File(filePath);
Uri uri = Uri.fromFile(f);
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(uri, fileType);
return intent;
}
}
(您可以在https://developer.android.com/guide/components/intents-filters上了解有关Android Intent的更多信息)
现在我有了Java辅助函数,可以从C ++代码发出JNI调用以使用辅助函数。 Java代码将生成所需的Intent对象,我终于可以使用QtAndroid :: startActivity()。
这是我用来在外部Android应用中打开(查看)文件的C ++函数:
void openFile(QString filePath, QString fileType)
{
QAndroidJniObject jfilePath =
QAndroidJniObject::fromString(filePath);
QAndroidJniObject jfileType =
QAndroidJniObject::fromString(fileType);
QAndroidJniObject intent = QAndroidJniObject::callStaticObjectMethod("com/k9spud/FileBrowser/AndroidAction",
"openFile",
"(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
jfilePath.object<jstring>(),
jfileType.object<jstring>());
QtAndroid::startActivity(intent, 0);
}
例如,要显示视频文件,我调用C ++ openFile()函数,将完整路径传递到所需文件,并传递MIME类型,该类型向Android指示应显示哪些应用程序作为查看此文件的可能方法:>
openFile("/storage/emulated/legacy/Movies/myvideo.mp4", "video/mp4");