[英]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.