簡體   English   中英

在Qt Quick中的Android上的常規共享按鈕

[英]General Share button on Android in Qt Quick

在我的Qt基於Quick的應用程序中,其第一個目標平台是Android,我需要讓用戶共享圖像。 我的意思是Android上的一般分享行動,不僅限於任何特定的社交網絡:

在此輸入圖像描述

我確實找到了一些關於在Qt上分享FB和Twitter的線索,但他們直接使用Facebook / Twitter API,這不是我想要的。

從我到目前為止發現,似乎沒有跨平台的方法來做這個,我的應用程序可能必須包含一些Java代碼。 如果這是正確的,那么目前在Android上編寫特定於平台的代碼的正確方法是什么? 喜歡這個

另一個想法是,可以通過在WebView中加載的網站中運行的Javascript來調用共享操作。 由於網絡應用程序具有共享功能,因此這應該是可能的,可能更具跨平台性。 這看起來合情合理嗎?

就我而言。 最好的,實際上唯一可行的方法是使用Jni。 乍一看似乎很混亂,但如果你有一點java經驗,肯定你可以做到。

為了將文本發送到另一個應用程序,如facebook,我們應該使用Intents。 所以我們可以簡單地在一個簡單的Java文件中完成這項工作,並使用Jni從c ++端調用它。 這是SendIntent.java文件的內容。 該類有一個靜態成員函數,它給出一個上下文並啟動Intent。 然后它將文本數據發送到新活動。

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活動並將它傳遞給這個類:這是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源的目錄。

我希望這篇文章也能幫到你: http//blog.lasconic.com/share-on-ios-and-android-using-qml/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM