在AndroidMainfest.xml添加了写文件权限还是提示open failed:eacces (permission denied)
2016-11-01 12:09
519 查看
For API 23+ you need to request the read/write permissions even if they are already in your manifest.
因为在API23以上版本,你必须请求读写权限,即使你在清单文件里声明了。
用AndroidStudio开发:
使用旧的eclipse的话:
申请多条权限:
1.声明变量:
2.onCreate里调用:
3.回调:
另:安卓M以上版本,如果你在Activity申请了Manifest没有声明的权限,那么将不会弹出权限请求的对话框,直接返回-1(权限拒绝);如果你在Manifest声明了,但没有在Activity里申请就直接使用特殊的权限,应用将直接闪退。
因为在API23以上版本,你必须请求读写权限,即使你在清单文件里声明了。
private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE };
用AndroidStudio开发:
int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions( MainActivity.this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); }
使用旧的eclipse的话:
int permission = OperateQuestionnairActivity.this.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user OperateQuestionnairActivity.this.requestPermissions( PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); }
申请多条权限:
1.声明变量:
// 权限 private static final int REQUEST_PERMISSION = 1; private static String[] PERMISSIONS = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.INTERNET, Manifest.permission.VIBRATE, Manifest.permission.CAMERA, Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS, Manifest.permission.RECEIVE_BOOT_COMPLETED, Manifest.permission.WAKE_LOCK, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_LOGS };
2.onCreate里调用:
/** * 初始化权限 */ private void initPermission() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { boolean isGranted = true; for (String permission : PERMISSIONS) { int result = ActivityCompat.checkSelfPermission(this, permission); if (result != PackageManager.PERMISSION_GRANTED) { isGranted = false; break; } } if (!isGranted) { // 还没有的话,去申请权限 ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_PERMISSION); } } }
3.回调:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_PERMISSION) { boolean granted = true; for (int result : grantResults) { granted = result == PackageManager.PERMISSION_GRANTED; if (!granted) { break; } } if (!granted) { // 没有赋予权限 } else { // 已经赋予过权限了 } } }
另:安卓M以上版本,如果你在Activity申请了Manifest没有声明的权限,那么将不会弹出权限请求的对话框,直接返回-1(权限拒绝);如果你在Manifest声明了,但没有在Activity里申请就直接使用特殊的权限,应用将直接闪退。
相关文章推荐
- 在AndroidMainfest.xml添加了写文件权限还是提示open failed:eacces (permission denied)
- android 6.0 读取sd卡上文件报错,manifest已经添加权限, open failed: EACCES (Permission denied)
- 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 可以让界面不被弹出的键盘挤上去。
- 2.AndroidMainfest.xml文件解释
- Android之androidmainfest.xml配置文件详解
- 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 可以让界面不被弹出的键盘挤上去。
- AndroidMainfest.xml文件解释
- AndroidMainfest.xml文件解释
- AndroidMainfest.xml文件解释
- 学习Android从0开始之基础篇(2)-AndroidMainfest.xml文件详解
- AndroidMainfest.xml文件解释
- AndroidMainfest.xml文件中的android属性
- AndroidMainfest.xml文件详解
- android mainfest.xml文件解剖
- 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 可以让界面不被弹出的键盘挤上去。
- android读取文件错误,权限拒绝 open failed: EACCES (Permission denied),华为手机报错
- AndroidMainfest.xml文件中的android属性
- Android之androidmainfest.xml配置文件详解
- 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 可以让界面不被弹出的键盘挤上去。
- AndroidMainfest.xml文件解释