Java 写入外部权限被拒绝
在搜索解决方案时,我遇到了将图片保存到手机外部存储器的问题(权限被拒绝)。我找到了3个不同的答案 第一个是清单文件中的uses权限,我已经有了这个权限,但是我尝试在清单中移动它,但没有成功 第二个问题是,如果它的API 23或更高,它必须请求许可,而不是在清单中,但我使用的是API 15 最后,因为它是一部物理手机而不是模拟器,一些人说它在插入计算机时无法访问外部存储(因为计算机正在访问它),但我的手机设置为只充电,而且我也尝试过拔下它,但没有成功 我唯一能想到的是这款手机是谷歌像素,所以它没有SD卡,但我在androids网站上看到,没有SD卡选项的设备有一个外部内存分区 我错过什么了吗 杰克 编辑: 代码块:Java 写入外部权限被拒绝,java,android,android-external-storage,Java,Android,Android External Storage,在搜索解决方案时,我遇到了将图片保存到手机外部存储器的问题(权限被拒绝)。我找到了3个不同的答案 第一个是清单文件中的uses权限,我已经有了这个权限,但是我尝试在清单中移动它,但没有成功 第二个问题是,如果它的API 23或更高,它必须请求许可,而不是在清单中,但我使用的是API 15 最后,因为它是一部物理手机而不是模拟器,一些人说它在插入计算机时无法访问外部存储(因为计算机正在访问它),但我的手机设置为只充电,而且我也尝试过拔下它,但没有成功 我唯一能想到的是这款手机是谷歌像素,所以它没有
private void takeScreenshot() {
Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
try {
String mPath = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).getAbsolutePath()
+"/Screenshots/image"+now;
// create bitmap screen capture
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
File imageFile= new File(mPath);
Log.e("ERROR",mPath);
FileOutputStream outputStream =
new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG,
quality, outputStream);
outputStream.flush();
outputStream.close();
} catch (Throwable e) {
e.printStackTrace();
}
}
错误日志:
09-08 16:59:25.774 13514-13514/com.example.jake.wellsfargo E/ERROR: /storage/emulated/0/Pictures/Screenshots/imageFri Sep 08 16:59:25 EDT 2017
09-08 16:59:25.776 13514-13514/com.example.jake.wellsfargo W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Screenshots/imageFri Sep 08 16:59:25 EDT 2017 (Permission denied)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at java.io.FileOutputStream.open(Native Method)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at com.example.jake.wellsfargo.MainActivity.takeScreenshot(MainActivity.java:317)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at com.example.jake.wellsfargo.MainActivity.access$100(MainActivity.java:48)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at com.example.jake.wellsfargo.MainActivity$2.onClick(MainActivity.java:84)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at android.view.View.performClick(View.java:5637)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at android.view.View$PerformClick.run(View.java:22429)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at android.os.Looper.loop(Looper.java:154)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6121)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at java.lang.reflect.Method.invoke(Native Method)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
09-08 16:59:25.774 13514-13514/com.example.jake.wellsfargo E/ERROR:/storage/simulated/0/Pictures/Screenshots/images 2017年9月8日星期五16:59:25 EDT
09-08 16:59:25.776 13514-13514/com.example.jake.wellsfargo W/System.err:java.io.FileNotFoundException:/storage/simulated/0/Pictures/Screenshots/imageFri 2017年9月8日16:59:25 EDT(权限被拒绝)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at java.io.FileOutputStream.open(本机方法)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:221)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:169)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at com.example.jake.wellsfargo.MainActivity.takeScreenshot(MainActivity.java:317)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at com.example.jake.wellsfargo.MainActivity.access$100(MainActivity.java:48)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at com.example.jake.wellsfargo.MainActivity$2.onClick(MainActivity.java:84)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at-android.view.view.performClick(view.java:5637)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at-android.view.view$PerformClick.run(view.java:22429)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at android.os.Handler.handleCallback(Handler.java:751)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at-android.os.Handler.dispatchMessage(Handler.java:95)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at android.os.Looper.loop(Looper.java:154)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:位于android.app.ActivityThread.main(ActivityThread.java:6121)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at java.lang.reflect.Method.invoke(本机方法)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
09-08 16:59:25.777 13514-13514/com.example.jake.wellsfargo W/System.err:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
您所说的“使用API 15”是什么意思?您是在API15(冰激凌)Android上运行应用程序,还是使用API15编译应用程序?另外,您提供的描述有点模糊。你能提供一段你用来访问外部存储的代码和你得到的错误的确切文本吗?我用日志和代码块编辑了我的原始帖子,对于API版本,如果我进入app->project structure,它说sdk级别是15,不管怎样,我的网络状态在清单中使用权限工作正常,所以我很确定它在API级别23下(Android为Android 6.0棉花糖添加了新的权限模型)你说的“使用API 15”是什么意思?您是在API15(冰激凌)Android上运行应用程序,还是使用API15编译应用程序?另外,您提供的描述有点模糊。你能提供一段你用来访问外部存储的代码和你得到的错误的确切文本吗?我用日志和代码块编辑了我的原始帖子,对于API版本,如果我进入app->project structure,它说sdk级别是15,不管怎样,我的网络状态在清单中使用权限工作正常,所以我很确定它在API级别23See下(Android为Android 6.0棉花糖添加了新的权限模型)