Android 安卓:如何共享软件包目录中的图像?
我想共享应用程序包目录中的多个映像。我的文件位于以下路径中,如下所示<代码>/data/data/com.example。现在我可以得到图像路径。但不将任何图像附加到共享应用程序。如whats应用程序、消息和Facebook等,我已经在清单文件中实现了许可。请看下面我的尝试Android 安卓:如何共享软件包目录中的图像?,android,file-sharing,Android,File Sharing,我想共享应用程序包目录中的多个映像。我的文件位于以下路径中,如下所示/data/data/com.example。现在我可以得到图像路径。但不将任何图像附加到共享应用程序。如whats应用程序、消息和Facebook等,我已经在清单文件中实现了许可。请看下面我的尝试 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/*"); inten
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
,比如fromUri.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 usingFileProvider
,尽管用于ACTION\u VIEW
,不是ACTION\u SEND
。我的问题是我想共享应用程序包文件夹中的图像,如/data/data/com.example/image/image1.jpg
这种类型。我正在包文件夹中存储图像,我需要它来共享图像,我可以在imageview中显示,但不能共享@CommonsWare@RaviVaghela:不是标准位置<代码>文件提供程序将不支持它。您需要编写自己的流媒体ContentProvider
,或者切换到将文件存储在更传统的位置(例如,getFilesDir()
)FileProvider
支持。是的,因为我必须复制外部存储中的数据并共享it@RaviVaghela:这不会帮助您从下一个版本的Android开始,如图所示。