android mkdirs 不起作用,无法在Android 6.0中创建的目录与mkdirs(存储许可OK)

但是,如果用户授予应用程序的存储权限,则应用程序无法使用'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设备上测试了代码,并且它可以正常工作。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值