我在尝试与其他应用程序共享图像时遇到了一个奇怪的问题。共享适用于Nexus 5,但在Nexus 6上失败 - 两者都运行6.0.1,两者编译完全相同。
对于Keep(或任何其他应用程序,就此问题而言)共享在5上工作正常。但是,在Nexus 6上,Keep无法附加图像。 logcat
显示以下内容:
08-19 10:25:15.232 4491 4491 E Keep : Image file not found
08-19 10:25:15.232 4491 4491 E Keep : java.io.FileNotFoundException: /storage/emulated/0/Android/data/org.foo.bar/cache/share-1471627513628.png: open failed: EACCES (Permission denied)
文件已成功写入,因此不是权限问题。我可以在该位置看到该文件(使用adb shell
和ls
),因此并非它无法访问。我甚至可以使用adb pull
下载文件并在图片查看器中打开它,因此它没有损坏。
这两款设备都没有根据,此功能以前在Nexus 6上运行时没有任何问题。
以下是相关代码:
File outputFile = new File(context.getExternalCacheDir(),
"share-" + System.currentTimeMillis() + ".png");
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
// ..Do the actual rendering..
OutputStream stream = new FileOutputStream(outputFile.toString());
bmp.compress(Bitmap.CompressFormat.PNG, 80, stream);
stream.close();
Uri fileUri = Uri.fromFile(outputFile);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
context.startActivity(Intent.createChooser(intent,
context.getString(R.string.share)));
This post表示这是Android中的一个错误,但我不太确定。
build.gradle中的一些相关信息:
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
}
有什么建议吗?