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

无法通过邮件文件提供程序共享图像

董哲
2023-03-14
private void sendMail() {
    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:")); 
    i.putExtra(Intent.EXTRA_EMAIL, new String[]{"xyz@gmail.com"}); 
    i.putExtra(Intent.EXTRA_SUBJECT, "test");     
    File imagePath = new File(getFilesDir().getAbsolutePath(), "last_img");
    File newFile = new File(imagePath, "lastimg.jpg"); 
    Uri contentUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", newFile); 
    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    i.putExtra(Intent.EXTRA_STREAM, contentUri);
    try {
        startActivity(Intent.createChooser(i, "Send mail...")); 
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); 
    }
}
   <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="lastImage" path="last_img/" />
private void writeImage() {
        String root = context.getFilesDir().getAbsolutePath();
        File fileDir = new File(root + "/last_img");//no i18n
        File file = new File(fileDir, "lastimg.jpg");//no i18n
        if (!fileDir.exists()) {
            fileDir.mkdirs();
        }
        if (file.exists()) {
           file.delete();
        }
        file.createNewFile();
        FileOutputStream fos = new FileOutputStream(file.getPath());

        fos.write(data);
        fos.close();
 }

共有1个答案

阙佐
2023-03-14

最后我改变了

 i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
     String packageName = resolveInfo.activityInfo.packageName;
     grantUriPermission(packageName, contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

来解决这个问题。

 类似资料:
  • 我一直在尝试解决一个问题与共享映像从外部存储目录。它在大多数设备中起作用,但在其他设备中不起作用。我有:1。添加了扩展FileProvider的类: 我的共享映像功能在下面: 我将感谢你的帮助

  • 问题内容: 这是我的代码,但这是针对单个文件的解决方案。 我可以像下面的单个文件一样共享多个文件和上载吗? 问题答案: 是的,但是您需要使用而不是。 这绝对可以简化,但我在其中保留了一些内容,以便您可以分解所需的每个步骤。 更新 :从API 24开始,共享文件URI将导致FileUriExposedException。为了解决这个问题,您可以将compileSdkVersion切换为23或更低版本

  • 具有以下邮件配置设置: 以及以下属性: 我得到以下错误: JAVAlang.RuntimeException:javax。邮政MessaginException:无法连接到SMTP主机:SMTP。我们德勤。com,端口:25;嵌套的例外是:java。网SocketException:权限被拒绝: 当我使用gmail作为“发件人”帐户和“收件人”中的Outlook帐户时,代码是一样的。 我试着设置s

  • 我想分享 /Internal存储/aaa/bbb.dat文件到另一个应用程序通过FileProvider。但它出错了。 我已经将路径放入了provider\u path。xml并将提供程序放入清单文件中。 我希望gmail或midrop/shareme能够打开和bbb。dat文件附呈。但它出错了 显示 提供者路径。xml 我是根据这些帖子编写代码的 Android:自定义外部存储文件夹上的文件提供

  • 问题内容: 我正在为Django使用apache + mod_wsgi。 并且所有css / js / images都通过提供。 出于某种奇怪的原因,当其他人/朋友/同事尝试访问该网站时,jquery / css不会为他们加载,因此页面看上去很混乱。 我的html文件使用这样的代码- 我的nginx配置是这样的 有一个目录,其中有相应的&目录。 奇怪的是,当我访问它们时页面显示正常。 我已经清除了