Android上的Qt 5.14.2共享文件

owfi6suc  于 2023-05-27  发布在  Android
关注(0)|答案(3)|浏览(151)

我正在尝试从我的应用程序在Android上共享一个简单的PDF文件。我知道从Android 7的API已经改变了,所以我试图实现我自己的FileProvider。
这是我的AndroidManifest.xml

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="it.semibyte.androidtest.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <!-- ressource file to create -->
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths">  
    </meta-data>
</provider>

这是res/xml下的file_paths. xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="." />
</paths>

这是我的java文件

package it.semibyte.utils;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import androidx.core.content.FileProvider;
import java.io.File;

import org.qtproject.qt5.android.QtNative;

public class ShareUtils
{
  public static boolean share(Context context, String filepath)
  {
    if(QtNative.activity() == null)
      return false;

    File file = new File(filepath);
    if(!file.exists())
      return false;

    Uri uri = FileProvider.getUriForFile(context, "it.semibyte.provider", file);

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_TEXT, "Share file");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    intent.setType("application/pdf");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    // Verify that the intent will resolve to an activity
    if(sendIntent.resolveActivity(QtNative.activity().getPackageManager()) == null)
      return false;

    QtNative.activity().startActivity(intent);
    return true;
  }
}

我还创建了一个gradle.properties文件,看起来像这样(它与qt生成的默认gradle.properies合并):

android.useAndroidX=true
android.enableJetifier=true

当我尝试编译它给我这个错误:

ShareUtils.java:7: error: package androidx.core.content does not exist
import androidx.core.content.FileProvider;

有什么建议吗?谢谢你

bvuwiixz

bvuwiixz1#

要在Qt应用程序中启用AndroidX,我们需要:
1.添加
Gradle_OPTS="-Dorg.gradle.project.android.useAndroidX=true -Dorg.gradle.project.android. enableJetier =true”
到'DEFAULT_JVM_OPTS=""'行下面的android/gradlew
1.添加
实现'androidx.appcompat:appcompat:1.1.0'
在android/build.gradle的'dependencies'部分
more detail

dtcbnfnu

dtcbnfnu2#

将此添加到您的构建中。gradle
allprojects { repositories { google() } }

v2g6jxz6

v2g6jxz63#

详细使用这篇StackOverflow文章。
对于您的问题,您必须将以下块添加到build.gradle文件中:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    implementation 'androidx.core:core:1.7.0'
    implementation 'com.android.support:support-v4:23.0.1'
}

以及gradle.properties文件必须包含以下代码:

android.useAndroidX=true
android.enableJetifier=true

相关问题