gpt4 book ai didi

android - Qt Quick 中 Android 上的常规共享按钮

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:55 24 4
gpt4 key购买 nike

在我的第一个目标平台是 Android 的基于 Qt Quick 的应用程序中,我需要允许用户共享图像。我指的是 Android 上的一般分享操作,不限于任何特定的社交网络:

enter image description here

我确实从 Qt 找到了一些关于在 FB 和 Twitter 上分享的帖子,但他们直接使用 Facebook/Twitter API,这不是我想要的。

根据我目前的发现,似乎没有跨平台的方法来执行此操作,我的应用程序可能必须包含一些 Java 代码。如果这是正确的,那么目前在 Android 上编写特定于平台的代码的正确方法是什么?喜欢this

另一个想法是,可以通过在 WebView 中加载的网站中运行的 Javascript 调用共享操作。 .由于 Web 应用程序具有共享功能,因此这应该是可能的,并且可能更跨平台。这看起来合理吗?

最佳答案

就我而言。最好也是实际上唯一实用的方法是使用 Jni。乍一看似乎很困惑,但如果你有一点 java 经验,你肯定可以做到。

为了向另一个应用程序(如 facebook)发送文本,我们应该使用 Intents。所以我们可以简单地在一个简单的 Java 文件中完成这项工作,并使用 Jni 从 C++ 端调用它。下面是 SendIntent.java 文件的内容。该类有一个静态成员函数,它提供上下文并启动 Intent。然后它将文本数据发送到新 Activity 。

package com.example.android.tools;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class SendIntent {
public static void sendText(Activity context,String text) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, text);
sendIntent.setType("text/plain");
context.startActivity(Intent.createChooser(sendIntent, text));
}
}

所以在 C++ 方面,我们只需要启动一个 Android Activity 并将其传递给此类:这是 C++ 代码:

void example::shareText(QString str)
{
QAndroidJniEnvironment _env;
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); //activity is valid
if (_env->ExceptionCheck()) {
_env->ExceptionClear();
throw InterfaceConnFailedException();
}
if ( activity.isValid() )
{
QAndroidJniObject::callStaticMethod<void>("com/example/android/tools/SendIntent","sendText","(Landroid/app/Activity;Ljava/lang/String;)V",activity.object<jobject>(),QAndroidJniObject::fromString(str).object<jstring>());
if (_env->ExceptionCheck()) {
_env->ExceptionClear();
throw InterfaceConnFailedException();
}
}else
throw InterfaceConnFailedException();
}

如果您担心跨平台问题,您可以使用预处理器指令来编写平台相关代码,这是 c++ 编程中非常常见的解决方案。

我最后要提到的是将这些代码行添加到 .pro 文件中。所以qt也能找到java资源:

android {
QT += androidextras
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
}

在这种情况下,android-sources 是我放置所有 java 源的目录。

关于android - Qt Quick 中 Android 上的常规共享按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128718/

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