Android 安卓:如何共享软件包目录中的图像?

Android 安卓:如何共享软件包目录中的图像?,android,file-sharing,Android,File Sharing,我想共享应用程序包目录中的多个映像。我的文件位于以下路径中,如下所示/data/data/com.example。现在我可以得到图像路径。但不将任何图像附加到共享应用程序。如whats应用程序、消息和Facebook等,我已经在清单文件中实现了许可。请看下面我的尝试 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/*"); inten

我想共享应用程序包目录中的多个映像。我的文件位于以下路径中,如下所示<代码>/data/data/com.example。现在我可以得到图像路径。但不将任何图像附加到共享应用程序。如whats应用程序、消息和Facebook等,我已经在清单文件中实现了许可。请看下面我的尝试

            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("image/*");
            intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(saveList.get(0).toString())));
            startActivity(Intent.createChooser(intent, "Share"));
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_SEND_MULTIPLE);
            intent.putExtra(Intent.EXTRA_SUBJECT, "Here are some files.");
            intent.setType("image/*"); /* This example is sharing jpeg images. */
            ArrayList<Uri> files = new ArrayList<Uri>();
            for(String path : saveList /* List of the files you want to send */) {
                File file = new File(path);
                Uri uri = Uri.fromFile(file);
                files.add(uri);
            }

            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);
            startActivity(intent);  
Intent Intent=新意图(Intent.ACTION\u SEND);
intent.setType(“image/*”);
intent.putExtra(intent.EXTRA_STREAM,Uri.fromFile(新文件(saveList.get(0.toString())));
startActivity(Intent.createChooser(Intent,“Share”));
意图=新意图();
intent.setAction(intent.ACTION\u SEND\u MULTIPLE);
intent.putExtra(intent.EXTRA_主题,“这里有一些文件”);
intent.setType(“image/*”);/*此示例是共享jpeg图像*/
ArrayList files=新的ArrayList();
for(字符串路径:saveList/*要发送的文件列表*/){
文件=新文件(路径);
Uri=Uri.fromFile(文件);
添加(uri);
}
intent.putParcelableArrayListExtra(intent.EXTRA\u流,文件);
星触觉(意向);
实现的权限如下所示

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

首先,
Uri.fromFile()
在您的情况下不起作用,因为第三方应用程序无法访问您的应用程序

其次,使用一个
文件:
Uri
,比如from
Uri.fromFile()
,看起来就像这样


相反,您需要使用,以使文件可供第三方应用程序使用。这在中介绍。

它与作用域存储兼容。所以不需要任何存储权限

fun shareFile(){
    var intentBuilder: ShareCompat.IntentBuilder
    intentBuilder = ShareCompat.IntentBuilder.from(this)
        .setType("image/jpg")
    intentBuilder.addStream(FileProvider.getUriForFile(this.baseContext!!
        , getString(R.string.package), File(path)))
    val intent = intentBuilder.intent.setAction(Intent.ACTION_SEND).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    startActivity(Intent.createChooser(intent, "Send to "))
}
明显地

 <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/provider_paths" />
    </provider>

创建一个xml文件

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <files-path path="/" name="allfiles" />
  <external-path path="/" name="externalfiles" />
  <root-path name="external_files" path="/storage/" />
</paths>


搜索一下,这一点以前已经回答过了。您需要实现一个
ContentProvider
,以允许任何其他应用程序访问您的私人文件夹中的文件。请查看:@RaviVaghela:shows using
FileProvider
,尽管用于
ACTION\u VIEW
,不是
ACTION\u SEND
。我的问题是我想共享应用程序包文件夹中的图像,如
/data/data/com.example/image/image1.jpg
这种类型。我正在包文件夹中存储图像,我需要它来共享图像,我可以在imageview中显示,但不能共享@CommonsWare@RaviVaghela:不是标准位置<代码>文件提供程序将不支持它。您需要编写自己的流媒体
ContentProvider
,或者切换到将文件存储在更传统的位置(例如,
getFilesDir()
FileProvider
支持。是的,因为我必须复制外部存储中的数据并共享it@RaviVaghela:这不会帮助您从下一个版本的Android开始,如图所示。