【发布时间】:2015-01-09 03:54:03
【问题描述】:
我正在关注this tutorial 拍摄照片、显示缩略图并将完整照片存储在仅对我的应用程序可用的本地公共存储中。
问题:尝试访问我的应用程序的本地存储时 EACCESS(权限被拒绝)
11-12 10:36:30.765 3746-3746/com.test.example.photo W/System.err﹕ java.io.IOException: open failed: EACCES (Permission denied)
11-12 10:36:30.765 3746-3746/com.test.example.photo W/System.err﹕ at java.io.File.createNewFile(File.java:948)
11-12 10:36:30.765 3746-3746/com.test.example.photo W/System.err﹕ at java.io.File.createTempFile(File.java:1013)
我查看了this question,但它似乎已经过时,因为今天没有任何解决方案可以工作。 This question 也没有提供有效的解决方案。我看到并尝试过的其他结果和解决方案似乎只是模糊相关。
我的清单权限
</application>
<!-- PERMISSIONS -->
<permission
android:name="android.hardware.Camera.any"
android:required="true" />
<permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:required="true" />
<!-- android:maxSdkVersion="18" seemingly does nothing-->
</manifest>
崩溃的方法
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
//THIS IS WHERE IT CRASHES
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
我正在使用 i9250 Galaxy Nexus 3 手机来运行示例,因为我的模拟器没有摄像头并且会自动删除元素。我的目标 SDK 是 16,我已将我的构建工具和 Android Studio 更新到最新版本。
我觉得我在这里遗漏了一些明显的东西,因为拍照在应用程序中是如此普遍,我无法想象它不适用于每个人,但我被困住了,我很感激你的指导。我对android很陌生,我主要使用的文献是Beginning Android 4 Game Programming,Beginning Android 4 and Pro Android 4。
感谢您的宝贵时间!
【问题讨论】:
-
我以前看过并评论过这个问题,它究竟在哪里提供了解决方案?我没看到。我尝试了各种授予权限的方法,尽管 android 应该自动让我访问我的应用程序的公共存储,但无论如何,它都会被阻止。
-
为了澄清,在示例中使用了 Environment.getExternalStoragePublicDirectory,但这指的是 SD 卡。据我了解,使用 getExternalFilesDir 可以提供本地沙盒存储。主要区别在于您的应用无法访问它不应该访问的文件,并且当您的应用被卸载时,本地存储的所有内容都会被删除。
标签: android file-io android-permissions