但是,如果用户授予应用程序的存储权限,则应用程序无法使用'mkdirs'在'onRequestPermissionsResult'方法中创建目录。
在AndroidManifest.xml我把'uses-permission':
package="com.xample.provasd"
android:versionCode="1"
android:versionName="1.0" >
然后在我处理的许可要求在MainActivity:
public void executeButton(View view){
final String[] PERMISSIONS_STORAGE = { Manifest.permission.WRITE_EXTERNAL_STORAGE };
//Asking request Permissions
ActivityCompat.requestPermissions(this,PERMISSIONS_STORAGE, 9);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
boolean writeAccepted = false;
switch(requestCode){
case 9:
writeAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;
break;
}
if(writeAccepted){
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File dir = new File(Environment.getExternalStorageDirectory()+"/"+"TestFolder");
boolean b = dir.mkdirs();
if(b){
Log.i("TAG", "WOW! "+dir+" created!");
}else{
Log.e("TAG", "OPS! "+dir+" NOT created! To be sure: new dir exist? "+dir.exists());
}
}
}
}
启动模拟器上的应用程序,请求对话框显示:允许执行'onRequestPermissionsResult'正文的权限(writeAccepted=true)但是该文件夹未被创建!
这是出现在logcat中:
I/TAG(9020): Permission ok
I/TAG(9020): Try to create dir: /storage/3143-1CEA/TestFolder
E/TAG(9020): OPS! /storage/3143-1CEA/TestFolder NOT created! To be sure: new dir exist? false
我不明白其中的道理。
请有人能帮助我吗?
谢谢
米尔科
2016-02-13
Mirko
+0
我复制了你的代码,并成功地在Nexus 5,6,9的模拟器上使用SDK Build Tools 23.0.2版运行它。如果您没有使用最新版本的工具,则可以考虑升级以查看它是否有所作为。当我第一次运行使用旧版本创建的模拟器时,即使为模拟器配置了SD卡(hw.sdCard = yes,仿真器的config.ini),也会将“Environment.MEDIA_MOUNTED”返回“移除”。 –
+0
非常感谢您的回复。那么,你的意思是它可能只是一个环境问题? 我正在更新SDK构建工具,我将尝试创建另一个机器实例。 PS。我发现一个可怕的解决方法:获得许可后,文件夹创建失败,但如果我做了一个“强制停止”的应用程序,我再次打开它...它的作品(没有再次请求许可)。 –
+0
编辑:更新SDK版本工具到版本23.0.2不起作用!但是我在真实的6.0设备上测试了代码,并且它可以正常工作。 –