From 699d39d5283084bbee4c45896263aa792e91787a Mon Sep 17 00:00:00 2001 From: FalsinSoft Date: Mon, 24 Feb 2020 13:54:54 +0100 Subject: [PATCH] Added code for receive multiple shared data --- QtAndroidTools/QAndroidSharing.cpp | 83 ++++++++---- QtAndroidTools/QAndroidSharing.h | 29 +++-- QtAndroidTools/QtAndroidTools.cpp | 29 +++++ QtAndroidTools/QtAndroidTools.h | 2 + .../qtandroidtools/AndroidSharing.java | 123 +++++++++++------- QtAndroidToolsDemo/Main.qml | 2 +- QtAndroidToolsDemo/tools/AndroidSharing.qml | 56 ++++---- 7 files changed, 205 insertions(+), 119 deletions(-) diff --git a/QtAndroidTools/QAndroidSharing.cpp b/QtAndroidTools/QAndroidSharing.cpp index 9ca2a88..2a3c440 100644 --- a/QtAndroidTools/QAndroidSharing.cpp +++ b/QtAndroidTools/QAndroidSharing.cpp @@ -44,7 +44,7 @@ QAndroidSharing::QAndroidSharing() : m_JavaSharing("com/falsinsoft/qtandroidtool JniEnv->DeleteLocalRef(ObjectClass); } - CheckSharingRequest(); + CheckReceivedSharingRequest(); } QObject* QAndroidSharing::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine) @@ -60,28 +60,28 @@ QAndroidSharing* QAndroidSharing::instance() return m_pInstance; } -QAndroidSharing::ACTION_ID QAndroidSharing::getAction() const +QAndroidSharing::ACTION_ID QAndroidSharing::getReceivedSharingAction() const { - return m_Action; + return m_ReceivedSharingAction; } -QString QAndroidSharing::getMimeType() const +QString QAndroidSharing::getReceivedSharingMimeType() const { - return m_MimeType; + return m_ReceivedSharingMimeType; } -void QAndroidSharing::CheckSharingRequest() +void QAndroidSharing::CheckReceivedSharingRequest() { if(m_JavaSharing.isValid()) { QAndroidJniObject MimeTypeObj; - m_Action = static_cast(m_JavaSharing.callMethod("getAction", "()I")); + m_ReceivedSharingAction = static_cast(m_JavaSharing.callMethod("getReceivedSharingAction", "()I")); - MimeTypeObj = m_JavaSharing.callObjectMethod("getMimeType", "()Ljava/lang/String;"); + MimeTypeObj = m_JavaSharing.callObjectMethod("getReceivedSharingMimeType", "()Ljava/lang/String;"); if(MimeTypeObj.isValid()) { - m_MimeType = MimeTypeObj.toString(); + m_ReceivedSharingMimeType = MimeTypeObj.toString(); } } } @@ -99,11 +99,11 @@ bool QAndroidSharing::shareText(const QString &Text) return false; } -bool QAndroidSharing::shareData(const QString &MimeType, const QString &DataFilePath) +bool QAndroidSharing::shareBinaryData(const QString &MimeType, const QString &DataFilePath) { if(m_JavaSharing.isValid()) { - return m_JavaSharing.callMethod("shareData", + return m_JavaSharing.callMethod("shareBinaryData", "(Ljava/lang/String;Ljava/lang/String;)Z", QAndroidJniObject::fromString(MimeType).object(), QAndroidJniObject::fromString(DataFilePath).object() @@ -113,13 +113,13 @@ bool QAndroidSharing::shareData(const QString &MimeType, const QString &DataFile return false; } -QString QAndroidSharing::getSharedText() +QString QAndroidSharing::getReceivedSharedText() { QString SharedText; if(m_JavaSharing.isValid()) { - const QAndroidJniObject SharedTextObj = m_JavaSharing.callObjectMethod("getSharedText", "()Ljava/lang/String;"); + const QAndroidJniObject SharedTextObj = m_JavaSharing.callObjectMethod("getReceivedSharedText", "()Ljava/lang/String;"); if(SharedTextObj.isValid()) { @@ -130,13 +130,13 @@ QString QAndroidSharing::getSharedText() return SharedText; } -QByteArray QAndroidSharing::getSharedData() +QByteArray QAndroidSharing::getReceivedSharedBinaryData() { QByteArray SharedData; if(m_JavaSharing.isValid()) { - const QAndroidJniObject SharedDataObj = m_JavaSharing.callObjectMethod("getSharedData", "()[B"); + const QAndroidJniObject SharedDataObj = m_JavaSharing.callObjectMethod("getReceivedSharedBinaryData", "()[B"); if(SharedDataObj.isValid()) { @@ -147,6 +147,31 @@ QByteArray QAndroidSharing::getSharedData() return SharedData; } +QVariantList QAndroidSharing::getReceivedMultipleSharedBinaryData() +{ + QVariantList MultipleSharedData; + + if(m_JavaSharing.isValid()) + { + const QAndroidJniObject MultipleSharedDataObj = m_JavaSharing.callObjectMethod("getReceivedMultipleSharedBinaryData", "()[[B"); + + if(MultipleSharedDataObj.isValid()) + { + const jobjectArray DataArray = MultipleSharedDataObj.object(); + QAndroidJniEnvironment pEnv; + int ArraySize; + + ArraySize = pEnv->GetArrayLength(DataArray); + for(int i = 0; i < ArraySize; i++) + { + MultipleSharedData << ConvertByteArray(QAndroidJniObject(pEnv->GetObjectArrayElement(DataArray, i))); + } + } + } + + return MultipleSharedData; +} + bool QAndroidSharing::requestSharedFile(const QString &MimeType) { if(m_JavaSharing.isValid()) @@ -165,36 +190,44 @@ bool QAndroidSharing::requestSharedFile(const QString &MimeType) return false; } -QByteArray QAndroidSharing::getRequestedSharedFile() +bool QAndroidSharing::saveRequestedSharedFile(const QString &FilePath) { - QByteArray SharedFileData; - if(m_JavaSharing.isValid()) { const QAndroidJniObject SharedFileDataObj = m_JavaSharing.callObjectMethod("getRequestedSharedFile", "()[B"); if(SharedFileDataObj.isValid()) { - SharedFileData = ConvertByteArray(SharedFileDataObj); + const QByteArray SharedFileData = ConvertByteArray(SharedFileDataObj); + QFile SharedFile(FilePath); + + if(SharedFile.open(QIODevice::WriteOnly) == true) + { + if(SharedFile.write(SharedFileData) == SharedFileData.size()) + { + return true; + } + SharedFile.remove(); + } } } - return SharedFileData; + return false; } -void QAndroidSharing::closeSharedFile() +void QAndroidSharing::closeRequestedSharedFile() { if(m_JavaSharing.isValid()) { - m_JavaSharing.callMethod("closeSharedFile"); + m_JavaSharing.callMethod("closeRequestedSharedFile"); } } -bool QAndroidSharing::returnSharedFile(bool FileAvailable, const QString &MimeType, const QString &FilePath) +bool QAndroidSharing::shareFile(bool FileAvailable, const QString &MimeType, const QString &FilePath) { if(m_JavaSharing.isValid()) { - return m_JavaSharing.callMethod("returnSharedFile", + return m_JavaSharing.callMethod("shareFile", "(ZLjava/lang/String;Ljava/lang/String;)Z", FileAvailable, QAndroidJniObject::fromString(MimeType).object(), @@ -238,7 +271,7 @@ void QAndroidSharing::RequestedSharedFileInfo(JNIEnv *env, jobject thiz, jstring if(m_pInstance != nullptr) { - emit m_pInstance->requestedSharedFileReadyToGet(QAndroidJniObject(mimeType).toString(), QAndroidJniObject(name).toString(), size); + emit m_pInstance->requestedSharedFileReadyToSave(QAndroidJniObject(mimeType).toString(), QAndroidJniObject(name).toString(), size); } } diff --git a/QtAndroidTools/QAndroidSharing.h b/QtAndroidTools/QAndroidSharing.h index 4fd8194..ed175a8 100644 --- a/QtAndroidTools/QAndroidSharing.h +++ b/QtAndroidTools/QAndroidSharing.h @@ -28,8 +28,8 @@ class QAndroidSharing : public QObject, public QAndroidActivityResultReceiver { - Q_PROPERTY(ACTION_ID action READ getAction CONSTANT) - Q_PROPERTY(QString mimeType READ getMimeType CONSTANT) + Q_PROPERTY(ACTION_ID receivedSharingAction READ getReceivedSharingAction CONSTANT) + Q_PROPERTY(QString receivedSharingMimeType READ getReceivedSharingMimeType CONSTANT) Q_DISABLE_COPY(QAndroidSharing) Q_ENUMS(ACTION_ID) Q_OBJECT @@ -50,32 +50,33 @@ public: static QAndroidSharing* instance(); Q_INVOKABLE bool shareText(const QString &Text); - Q_INVOKABLE bool shareData(const QString &MimeType, const QString &DataFilePath); - Q_INVOKABLE QString getSharedText(); - Q_INVOKABLE QByteArray getSharedData(); + Q_INVOKABLE bool shareBinaryData(const QString &MimeType, const QString &DataFilePath); + Q_INVOKABLE QString getReceivedSharedText(); + Q_INVOKABLE QByteArray getReceivedSharedBinaryData(); + Q_INVOKABLE QVariantList getReceivedMultipleSharedBinaryData(); Q_INVOKABLE bool requestSharedFile(const QString &MimeType); - Q_INVOKABLE QByteArray getRequestedSharedFile(); - Q_INVOKABLE void closeSharedFile(); - Q_INVOKABLE bool returnSharedFile(bool FileAvailable, const QString &MimeType = QString(), const QString &FilePath = QString()); + Q_INVOKABLE bool saveRequestedSharedFile(const QString &FilePath); + Q_INVOKABLE void closeRequestedSharedFile(); + Q_INVOKABLE bool shareFile(bool FileAvailable, const QString &MimeType = QString(), const QString &FilePath = QString()); - ACTION_ID getAction() const; - QString getMimeType() const; + ACTION_ID getReceivedSharingAction() const; + QString getReceivedSharingMimeType() const; signals: - void requestedSharedFileReadyToGet(const QString &mimeType, const QString &name, long size); + void requestedSharedFileReadyToSave(const QString &mimeType, const QString &name, long size); void requestedSharedFileNotAvailable(); private: const QAndroidJniObject m_JavaSharing; static QAndroidSharing *m_pInstance; const int m_SharedFileRequestId = 9002; - ACTION_ID m_Action = ACTION_NONE; - QString m_MimeType; + ACTION_ID m_ReceivedSharingAction = ACTION_NONE; + QString m_ReceivedSharingMimeType; void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override; static void RequestedSharedFileInfo(JNIEnv *env, jobject thiz, jstring mimeType, jstring name, jlong size); inline QByteArray ConvertByteArray(const QAndroidJniObject &JavaByteArray); - void CheckSharingRequest(); + void CheckReceivedSharingRequest(); }; diff --git a/QtAndroidTools/QtAndroidTools.cpp b/QtAndroidTools/QtAndroidTools.cpp index 2731323..c6da1ef 100644 --- a/QtAndroidTools/QtAndroidTools.cpp +++ b/QtAndroidTools/QtAndroidTools.cpp @@ -112,6 +112,35 @@ bool QtAndroidTools::removeImage(const QString &Name) return (m_PhotoMap.remove(Name) > 0) ? true : false; } +bool QtAndroidTools::binaryDataToFile(const QByteArray &BinaryData, const QString &FilePath) +{ + QFile BinaryFile(FilePath); + + if(BinaryFile.open(QIODevice::WriteOnly) == true) + { + if(BinaryFile.write(BinaryData) == BinaryData.size()) + { + return true; + } + BinaryFile.remove(); + } + + return false; +} + +QByteArray QtAndroidTools::fileToBinaryData(const QString &FilePath) +{ + QFile BinaryFile(FilePath); + QByteArray BinaryData; + + if(BinaryFile.open(QIODevice::ReadOnly) == true) + { + BinaryData = BinaryFile.readAll(); + } + + return BinaryData; +} + void QtAndroidTools::InitializeQmlTools() { qmlRegisterSingletonType("QtAndroidTools", 1, 0, "QtAndroidTools", &QtAndroidTools::qmlInstance); diff --git a/QtAndroidTools/QtAndroidTools.h b/QtAndroidTools/QtAndroidTools.h index 6980514..7915da7 100644 --- a/QtAndroidTools/QtAndroidTools.h +++ b/QtAndroidTools/QtAndroidTools.h @@ -71,6 +71,8 @@ public: Q_INVOKABLE bool insertImage(const QString &Name, const QByteArray &Data); Q_INVOKABLE bool removeImage(const QString &Name); + Q_INVOKABLE bool binaryDataToFile(const QByteArray &BinaryData, const QString &FilePath); + Q_INVOKABLE QByteArray fileToBinaryData(const QString &FilePath); private: static QtAndroidTools *m_pInstance; diff --git a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidSharing.java b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidSharing.java index 31d9378..b9d95aa 100644 --- a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidSharing.java +++ b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidSharing.java @@ -45,23 +45,22 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.io.FileDescriptor; +import java.util.ArrayList; public class AndroidSharing { private static final String TAG = "AndroidSharing"; private final Activity mActivityInstance; - private final Intent mActivityIntent; - private ParcelFileDescriptor mInputSharedFile = null; + private ParcelFileDescriptor mRequestedSharedFile = null; public AndroidSharing(Activity ActivityInstance) { mActivityInstance = ActivityInstance; - mActivityIntent = ActivityInstance.getIntent(); } - public int getAction() + public int getReceivedSharingAction() { - final String ActionValue = mActivityIntent.getAction(); + final String ActionValue = mActivityInstance.getIntent().getAction(); int ActionId = ACTION_NONE; if(ActionValue != null) @@ -83,43 +82,78 @@ public class AndroidSharing return ActionId; } - public String getMimeType() + public String getReceivedSharingMimeType() { - return mActivityIntent.getType(); + return mActivityInstance.getIntent().getType(); } - public String getSharedText() + public String getReceivedSharedText() { - return mActivityIntent.getStringExtra(Intent.EXTRA_TEXT); + return mActivityInstance.getIntent().getStringExtra(Intent.EXTRA_TEXT); } - public byte[] getSharedData() + public byte[] getReceivedSharedBinaryData() { - final Uri DataUri = (Uri)mActivityIntent.getParcelableExtra(Intent.EXTRA_STREAM); + final Uri DataUri = (Uri) mActivityInstance.getIntent().getParcelableExtra(Intent.EXTRA_STREAM); byte[] ByteArray = null; - InputStream DataStream; - try + if(DataUri != null) { - DataStream = mActivityInstance.getContentResolver().openInputStream(DataUri); - ByteArray = new byte[DataStream.available()]; - DataStream.read(ByteArray); - } - catch(FileNotFoundException e) - { - return null; - } - catch(IOException e) - { - return null; + try + { + final InputStream DataStream = mActivityInstance.getContentResolver().openInputStream(DataUri); + ByteArray = new byte[DataStream.available()]; + DataStream.read(ByteArray); + } + catch(FileNotFoundException e) + { + return null; + } + catch(IOException e) + { + return null; + } } return ByteArray; } + public byte[][] getReceivedMultipleSharedBinaryData() + { + final ArrayList UriArray = mActivityInstance.getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM); + byte[][] MultipleByteArray = null; + + if(UriArray != null) + { + final int UriNum = UriArray.size(); + + MultipleByteArray = new byte[UriNum][]; + + for(int i = 0; i < UriNum; i++) + { + try + { + final InputStream DataStream = mActivityInstance.getContentResolver().openInputStream(UriArray.get(i)); + MultipleByteArray[i] = new byte[DataStream.available()]; + DataStream.read(MultipleByteArray[i]); + } + catch(FileNotFoundException e) + { + return null; + } + catch(IOException e) + { + return null; + } + } + } + + return MultipleByteArray; + } + public boolean shareText(String Text) { - Intent SendIntent = new Intent(); + final Intent SendIntent = new Intent(); SendIntent.setAction(Intent.ACTION_SEND); SendIntent.putExtra(Intent.EXTRA_TEXT, Text); @@ -129,10 +163,10 @@ public class AndroidSharing return true; } - public boolean shareData(String MimeType, String DataFilePath) + public boolean shareBinaryData(String MimeType, String DataFilePath) { final String PackageName = mActivityInstance.getApplicationContext().getPackageName(); - Intent SendIntent = new Intent(); + final Intent SendIntent = new Intent(); Uri FileUri; try @@ -157,10 +191,10 @@ public class AndroidSharing return true; } - public boolean returnSharedFile(boolean FileAvailable, String MimeType, String FilePath) + public boolean shareFile(boolean FileAvailable, String MimeType, String FilePath) { final String PackageName = mActivityInstance.getApplicationContext().getPackageName(); - Intent ReturnIntent = new Intent(PackageName + ".ACTION_RETURN_FILE"); + final Intent ReturnFileIntent = new Intent(PackageName + ".ACTION_RETURN_FILE"); if(FileAvailable == true) { @@ -179,14 +213,14 @@ public class AndroidSharing return false; } - ReturnIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - ReturnIntent.setDataAndType(FileUri, MimeType); - mActivityInstance.setResult(Activity.RESULT_OK, ReturnIntent); + ReturnFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + ReturnFileIntent.setDataAndType(FileUri, MimeType); + mActivityInstance.setResult(Activity.RESULT_OK, ReturnFileIntent); } else { - ReturnIntent.setDataAndType(null, ""); - mActivityInstance.setResult(Activity.RESULT_CANCELED, ReturnIntent); + ReturnFileIntent.setDataAndType(null, ""); + mActivityInstance.setResult(Activity.RESULT_CANCELED, ReturnFileIntent); } return true; @@ -196,12 +230,11 @@ public class AndroidSharing { byte[] ByteArray = null; - if(mInputSharedFile != null) + if(mRequestedSharedFile != null) { - final FileInputStream DataStream = new FileInputStream(mInputSharedFile.getFileDescriptor()); - try { + final FileInputStream DataStream = new FileInputStream(mRequestedSharedFile.getFileDescriptor()); ByteArray = new byte[DataStream.available()]; DataStream.read(ByteArray); } @@ -210,7 +243,7 @@ public class AndroidSharing return null; } - closeSharedFile(); + closeRequestedSharedFile(); } return ByteArray; @@ -218,7 +251,7 @@ public class AndroidSharing public Intent getRequestSharedFileIntent(String MimeType) { - Intent RequestFileIntent = new Intent(Intent.ACTION_PICK); + final Intent RequestFileIntent = new Intent(Intent.ACTION_PICK); RequestFileIntent.setType(MimeType); return RequestFileIntent; } @@ -231,11 +264,11 @@ public class AndroidSharing Cursor DataCursor; long FileSize; - closeSharedFile(); + closeRequestedSharedFile(); try { - mInputSharedFile = Resolver.openFileDescriptor(SharedFileUri, "r"); + mRequestedSharedFile = Resolver.openFileDescriptor(SharedFileUri, "r"); } catch(FileNotFoundException e) { @@ -253,18 +286,18 @@ public class AndroidSharing return true; } - public void closeSharedFile() + public void closeRequestedSharedFile() { - if(mInputSharedFile != null) + if(mRequestedSharedFile != null) { try { - mInputSharedFile.close(); + mRequestedSharedFile.close(); } catch(IOException e) { } - mInputSharedFile = null; + mRequestedSharedFile = null; } } diff --git a/QtAndroidToolsDemo/Main.qml b/QtAndroidToolsDemo/Main.qml index adb3a4a..1dcbc97 100644 --- a/QtAndroidToolsDemo/Main.qml +++ b/QtAndroidToolsDemo/Main.qml @@ -13,7 +13,7 @@ ApplicationWindow { title: "QtAndroidTools Demo" Component.onCompleted: { - if(QtAndroidSharing.action !== QtAndroidSharing.ACTION_NONE) + if(QtAndroidSharing.receivedSharingAction !== QtAndroidSharing.ACTION_NONE) { stackView.push("qrc:/tools/AndroidSharing.qml"); } diff --git a/QtAndroidToolsDemo/tools/AndroidSharing.qml b/QtAndroidToolsDemo/tools/AndroidSharing.qml index 4eec21a..de42bf7 100644 --- a/QtAndroidToolsDemo/tools/AndroidSharing.qml +++ b/QtAndroidToolsDemo/tools/AndroidSharing.qml @@ -8,21 +8,21 @@ Page { padding: 20 Component.onCompleted: { - if(QtAndroidSharing.action === QtAndroidSharing.ACTION_SEND) + if(QtAndroidSharing.receivedSharingAction === QtAndroidSharing.ACTION_SEND) { - if(QtAndroidSharing.mimeType === "text/plain") + if(QtAndroidSharing.receivedSharingMimeType === "text/plain") { - receivedSharedText.text = QtAndroidSharing.getSharedText(); + receivedSharedText.text = QtAndroidSharing.getReceivedSharedText(); receivedSharedText.open(); } - else if(QtAndroidSharing.mimeType.startsWith("image") === true) + else if(QtAndroidSharing.receivedSharingMimeType.startsWith("image") === true) { - QtAndroidTools.insertImage("SharedImage", QtAndroidSharing.getSharedData()); + QtAndroidTools.insertImage("SharedImage", QtAndroidSharing.getReceivedSharedBinaryData()); sharedImage.source = "image://QtAndroidTools/SharedImage"; receivedSharedImage.open(); } } - else if(QtAndroidSharing.action === QtAndroidSharing.ACTION_PICK) + else if(QtAndroidSharing.receivedSharingAction === QtAndroidSharing.ACTION_PICK) { imageToShareDialog.open(); } @@ -30,42 +30,28 @@ Page { Connections { target: QtAndroidSharing - onRequestedSharedFileReadyToGet: { + onRequestedSharedFileReadyToSave: { requestedSharedFile.text = "Name: " + name + "\nSize: " + size + "\nMimeType: " + mimeType; + requestedSharedFile.fileName = name; requestedSharedFile.open(); } + onRequestedSharedFileNotAvailable: { + } } Column { anchors.fill: parent spacing: 20 - Label { + Button { anchors.horizontalCenter: parent.horizontalCenter - text: "Text to share" - font.bold: true - } - TextField { - id: sharedText - width: parent.width - text: "Hello Qt!" - horizontalAlignment: TextField.AlignHCenter + text: "Share text" + onClicked: QtAndroidSharing.shareText("This is my shared text!") } Button { anchors.horizontalCenter: parent.horizontalCenter - text: "Share" - onClicked: QtAndroidSharing.shareText(sharedText.text) - } - - Label { - anchors.horizontalCenter: parent.horizontalCenter - text: "Share file" - font.bold: true - } - Button { - anchors.horizontalCenter: parent.horizontalCenter - text: "Share" - onClicked: QtAndroidSharing.shareData("image/jpeg", QtAndroidSystem.dataLocation + "/sharedfiles/logo_falsinsoft.jpg") + text: "Share binary data" + onClicked: QtAndroidSharing.shareBinaryData("image/jpeg", QtAndroidSystem.dataLocation + "/sharedfiles/logo_falsinsoft.jpg") } Button { @@ -105,13 +91,15 @@ Page { id: requestedSharedFile title: "It's ok to get this file?" standardButtons: StandardButton.Yes | StandardButton.No - onNo: QtAndroidSharing.closeSharedFile() + onNo: QtAndroidSharing.closeRequestedSharedFile() onYes: { - QtAndroidTools.insertImage("SharedImage", QtAndroidSharing.getRequestedSharedFile()); - sharedImage.source = "image://QtAndroidTools/SharedImage"; + var filePath = QtAndroidSystem.dataLocation + "/sharedfiles/" + fileName; + QtAndroidSharing.saveRequestedSharedFile(filePath); + sharedImage.source = "file:/" + filePath; receivedSharedImage.quitOnClose = false; receivedSharedImage.open(); } + property string fileName } Dialog { @@ -131,11 +119,11 @@ Page { } onRejected: { - QtAndroidSharing.returnSharedFile(false); + QtAndroidSharing.shareFile(false); Qt.quit(); } onAccepted: { - QtAndroidSharing.returnSharedFile(true, "image/jpeg", QtAndroidSystem.dataLocation + "/sharedfiles/logo_falsinsoft.jpg"); + QtAndroidSharing.shareFile(true, "image/jpeg", QtAndroidSystem.dataLocation + "/sharedfiles/logo_falsinsoft.jpg"); Qt.quit(); } }