当前位置: 首页 > 知识库问答 >
问题:

作为意向发送时不接受Android PDF。行动发送

南宫书
2023-03-14

我有一个PDF文件,我正试图通过Intent分享。行动!。不过当我点击其中一个选项(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;
    }

我想问题一定出在我的电脑上?这就是说,我的文件的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>

共有1个答案

南门承教
2023-03-14

好吧,分享我自己的答案,因为我花了几个小时在这上面。

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;
    }

这个共享项按钮从我保存在内部存储器中的文件中提取。他们的关键是正确编写清单和xml文件

确保这在你的Androidanifest.xml的应用程序标签内——以及注意到我正在使用Android,相应地改变该行。我也从来没有弄清楚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>
 类似资料:
  • 我的会发出一个,当用户单击它时启动我的。 这看起来是这样的: 如您所见,应该具有额外的,其值为放在中。 当我单击“现在”这个时,我总是得到作为的值 这是我在中获取值的方式: 日志: 总是有值,我做错了什么? 这样就解决了问题:https://stackoverflow.com/a/18049676/2180161 报价: http://developer.android.com/reference

  • 预期响应代码为250,但收到代码“535”,消息“535-5.7.8用户名和密码不被接受。有关详细信息,请访问535 5.7.8https://support.google.com/mail/?p=BadCredentialsz7sm6546905pgb。24-gsmt 尝试发送电子邮件时发生此错误

  • 我正在尝试使用不同的应用程序附加图像,代码如下: 附加的图像是使用以下代码生成的: 但当我试图打开GMAIL与此意图,只有文本显示应用程序与错误:. 我错过了什么? 编辑 这是另一个解决方案:android。操作系统。FileUrieExposedException:文件。jpg通过ClipData曝光了app之外的内容。项目getUri()

  • 问题内容: 我正在建立一个客户-服务器项目。 我需要的是客户端发送一个字符串,例如“ Pendu”,服务器接收该字符串并将一个名为“ Pendu”的对象发送回客户端。 这是我的代码: 该类在包中定义: 我的问题是: 首先,我执行服务器,然后看到控制台中显示的内容。 然后我执行客户端,在控制台中,我收到如下消息: 同时,服务器端未显示任何新内容。 现在,我停止客户端,并显示服务器的所有其他消息: 当

  • 这是我用来调用web API的代码。通过浏览器调用web api工作正常。

  • 我一直在试图找到一种方法,从我的PC(Windows 7)向Arduino Uno R3发送串行命令。我一直在做这个简单的程序,你应该通过USB电缆发送一个简单的“1”,以便打开车载LED。我的Arduino代码应该可以工作(我知道的,但我会确保上传它)。我一直在尝试使用Python和pySerial发送此命令,但我似乎无法让pySerial正常工作。我也尝试过使用CMD,但当我输入命令(ECHO