发送As Assent.Action_Send时未接受Android PDF



我有一个我试图通过intent.action_send共享的pdf文件。虽然当我单击其中一个选项(Gmail,Google Drive等(时。它说"请求不包含数据。"**下面更新的代码

case R.id.share_item:
            final Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("application/pdf");
            shareIntent.putExtra(Intent.EXTRA_STREAM, displayedFile.getAbsolutePath());
            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            startActivity(Intent.createChooser(shareIntent, "Share PDF using.."));
            return true;
    }

我认为我的putextra必须出现问题吗?话虽如此,我的文件的URL肯定有效,因为我可以成功地使用该路径来打印PDF。

编辑:我已经更新了我的代码。

            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
            final Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("application/pdf");
            Uri uri = Uri.parse(displayedFile.getAbsolutePath());
            shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            startActivity(Intent.createChooser(shareIntent, "Share PDF using.."));

这使我从whatsapp中获得了"不接受的文件格式",而从gmail中获得了"无法附加文件"。

想知道问题是否是从内部存储中使用FileProvider的调用。

编辑2:尝试添加此代码,但我正在崩溃

 Uri outputPdfUri = FileProvider.getUriForFile(this,
                    PdfViewActivity.this.getPackageName() + ".provider", sharingFile);

我还将其添加到我的清单和file_paths

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="com.example.androidextensiontest.files"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

好的,因为我花了几个小时来分享我自己的答案。

case R.id.share_item:
            //these policy guidlines do not follow google Guidelines, recommended to change system
            //https://stackoverflow.com/questions/48117511/exposed-beyond-app-through-clipdata-item-geturi
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
            final Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("application/pdf");
            File sharingFile = new File(displayedFile.getPath());
            Uri outputPdfUri = FileProvider.getUriForFile(this, PdfViewActivity.this.getPackageName() + ".provider", displayedFile);
            shareIntent.putExtra(Intent.EXTRA_STREAM, outputPdfUri);
            
            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            //Write Permission might not be necessary
            shareIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            
            startActivity(Intent.createChooser(shareIntent, "Share PDF using.."));
            return true;
    }

此share_item按钮从我保存的文件中从内部存储中拉出。他们的关键是正确编写了清单和XML文件。

请确保在您的AndroidManifest.xml中的应用程序标签中进行此操作 - 以及通知我正在使用Androidx,请相应地更改该行。我也从来没有弄清楚Android:当局行,但我发现填充的答案是Github上最常见的答案。

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

最后是file_paths.xml-在红色文件夹中创建一个XML软件包,然后发布此代码。由于某种原因,其他代码是使我的文件共享不起作用的原因。

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <files-path name="projection" path="." />
</paths>

相关内容

  • 没有找到相关文章

最新更新