gpt4 book ai didi

android - 如何使用 QtAndroid::startActivity

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:43:56 25 4
gpt4 key购买 nike

新的 Qt Android extra 有一个新功能。 QtAndroid::startActivity

我不知道如何在 C++ 代码中设置第一个参数。谁能给我一个例子吗?非常感谢。

最佳答案

您必须构建一个包含 Android“Intent”对象的 JNI 对象。在 Java 中创建一个 Intent 对象相当容易,但我不知道如何从 C++ 中做到这一点。

因此,我的解决方案是向我的 Qt 项目添加一个 .java 文件,并在 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;
}
}

(您可以在此处阅读有关 Android Intents 的更多信息:https://developer.android.com/guide/components/intents-filters)

现在我有了我的 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");

关于android - 如何使用 QtAndroid::startActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com