我正在制作一个可从Internet下载文件并允许用户使用第三方应用程序打开这些文件的应用程序。我使用将这些文件存储在我的私有应用程序目录中getFilesDir()
。
但是,似乎这些文件无法被第三方应用程序访问,因为当我尝试打开它们时(使用像这样的第三方应用程序选择器),它无法打开该文件。我是否需要启用权限才能与其他应用程序共享文件?
编辑:似乎要使用File Provider
,您需要指定要为其提供访问权限的3rd-party-app的程序包名称。这是正确的,还是有一种解决方法来提供常规的第三方访问?
您有两个选择。
将应用程序注册为FileProvider
您在Android文档中拥有完整且更新的示例:https : //developer.android.com/reference/android/support/v4/content/FileProvider.html
如果要提供对任何第三方应用程序的访问权限,可以使用以下解决方法:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
(...)
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
将文件保存在大容量存储单元(sdcard)中
例如:
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/newDir");
dir.mkdirs();
File file = new File(dir, "filename");
FileOutputStream f = new FileOutputStream(file);
...
选择哪一个
这取决于您的目标。
如果您希望用户通过usb来访问文件,甚至在卸载您的应用程序后也可以使它们可用,则不要将这些文件的“已用空间”计数添加到您的应用程序中,...单位方式”是要走的路。
如果您希望这些文件“捆绑”到您的应用程序,仅在安装您的应用程序时可用,只能通过您的应用程序访问,...“文件提供者方式”是您可以使用的方式。
在Android中,如果不是明智的数据,则最好使用“大容量存储单元方式”。Android用户不喜欢“链” /限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句