繁体   English   中英

在 Android 中创建和共享 pdf 到 Gmail 应用程序 11

[英]Creating and Sharing pdf to Gmail app in Android 11

所以我试图在我的应用程序中创建一个 pdf 并将 pdf 作为附件发送到 gmail 应用程序。 在 android 11 范围存储限制之前一切都很好。

这是我正在使用的文件:provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="external"
        path="." />
    <external-files-path
        name="external_files"
        path="." />
    <cache-path
        name="cache"
        path="." />
    <external-cache-path
        name="external_cache"
        path="." />
    <files-path
        name="files"
        path="." />
</paths>

AndroidManifest.xml:

 <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

这是我试图添加为附件的文件:

File filelocation = new File(context.getCacheDir() +"/", "Some#" + printBean.getId() + ".pdf");

使用以下访问 Uri:

 Uri path = FileProvider.getUriForFile(this, getPackageName()+".fileprovider",filelocation);

但是当我通过 Uri 意图打开 gmail

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:"));
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{new UserPreference(context).getUser().getEmail()});
if (path != null) emailIntent.putExtra(Intent.EXTRA_STREAM, path);
emailIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Mail PDF");
emailIntent.putExtra(Intent.EXTRA_EMAIL, new UserPreference(context).getUser().getEmail());


emailIntent.putExtra(Intent.EXTRA_TEXT, printBean);
   context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.send_email)));

它给了我错误“无法附加文件”。

需要帮忙。 编辑:在日志中获取此异常:

ComposeActivity:Error adding attachment
    ggx: FileNotFoundException when openAssetFileDescriptor.
        at ggy.a(PG:6)
        at ggy.a(PG:45)
        at dod.a(PG:146)
        at dnk.run(PG:2)
        at dod.a(PG:184)
        at dod.a(PG:153)
        at dod.a(PG:452)
        at dkb.a(Unknown Source:3)
        at aezj.a(Unknown Source:5)
        at agzq.a(PG:2)
        at agzs.run(PG:9)
        at ahcg.run(Unknown Source:7)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
        at aexk.run(PG:2)
        at adjn.run(Unknown Source:3)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

那么 FiltUtils 可能会返回 null。 你可以像这样得到文件

val file = File(context.getCacheDir(), FILE_NAME) and afterwards pass
 FileProvider.getUriForFile(requireContext(),YOUR_PROVIDER_PACKAGE ,file)

文件提供者会给你 uri 然后你可以传递共享文件的内部意图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM