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

我确实从Qt找到了一些关于在FB和Twitter上分享的帖子,但他们直接使用了Facebook/Twitter API,这不是我想要的。
到目前为止,我发现似乎没有跨平台的方法可以做到这一点,我的应用程序可能必须包含一些Java代码。如果这是正确的,那么目前在Android上编写特定于平台的代码的正确方式是什么?像this一样
另一个想法是,可以通过在WebView中加载的网站中运行的Javascript来调用共享操作。由于web应用程序具有共享功能,这应该是可能的,而且可能更加跨平台。这看起来合理吗?
发布于 2015-05-09 22:20:19
据我所知。最好的,实际上也是唯一实用的方法是使用Jni。乍一看,这似乎非常令人困惑,但如果你有一点java经验,你肯定能做到。
为了将文本发送到另一个应用程序,比如facebook,我们应该使用Intents。因此,我们可以简单地在一个简单的Java文件中完成这项工作,并使用c++从JNI端调用它。下面是SendIntent.java文件的内容。该类有一个静态成员函数,该函数提供上下文并启动意图。然后,它将文本数据发送到新的活动。
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));
}
}因此,在android端,我们只需要启动一个c++活动并将其传递给这个类:下面是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-source是我放置所有java源代码的目录。
发布于 2016-07-04 16:14:39
我希望这篇文章也能帮助你:http://blog.lasconic.com/share-on-ios-and-android-using-qml/
https://stackoverflow.com/questions/30128718
复制相似问题