【发布时间】:2016-10-06 11:17:29
【问题描述】:
我有一个在 ACTION_SEND 上注册的图片编辑应用程序。这完美无缺。
这是我从意图访问文件的方式:
Uri intentUri = null;
if (Build.VERSION.SDK_INT >= 16) {
ClipData clipData = intent.getClipData();
if (clipData != null) {
intentUri = clipData.getItemAt(0).getUri();
}
}
if (intentUri == null) {
intentUri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
}
FileUtil.copyFile(getContentResolver().openInputStream(intentUri), new File(documentPath));
最近,从 facebook 应用分享失败:
java.io.FileNotFoundException: /data/user/0/com.facebook.katana/cache/fb_temp/.facebook_1475750693248.jpg: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:456)
at java.io.FileInputStream.<init>(FileInputStream.java:76)
at java.io.FileInputStream.<init>(FileInputStream.java:103)
at android.content.ContentResolver.openInputStream(ContentResolver.java:644)
我做错了什么?
【问题讨论】:
-
AFAIK 我不需要任何权限来读取 ContentResolver。此代码适用于许多其他发出 ACTION_SEND 的应用程序(画廊、谷歌照片等)。
-
既然你提到这是一个最近的问题,这可能是由于新的 Android Marshmallow (6.0) 权限模型而发生的。请看一下这个问题:stackoverflow.com/questions/33030933/…
-
来自其他应用的分享在 Marshmallow 上对我来说效果很好,而来自 FB 的分享在 Marshmallow 和 pre-Marshmallow 上都失败了。无论如何,从 ContentResolver 读取时不应该存在权限问题
标签: android facebook android-intent