参考:

http://www.cnblogs.com/whoislcj/p/6072718.html(重点这篇)

https://www.jianshu.com/p/b4a8b3d4f587

https://www.cnblogs.com/xmcx1995/p/5870191.html

1. 概念

Android 6.0以下非运行时权限:

Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:Normal 低风险权限 、Dangerous  高风险权限等,虽然有这种安全意识,但是这些权限只会在安装的时候被询问一次,一旦安装之后,如果app申请了高风险权限的话,而且大部分用户在安装的时候很少去关注这些权限列表,再加上很多Android市场都有静默安装的功能用户更加感知不到任何权限提示,就这样app就有可能会在后台做一些对用户带来伤害的事情。如下图所示:

Android6.0运行时权限:

鉴于6.0之前的版本权限管理相对不那么安全,所以Android 6.0 采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权限申请。这样的用户的自主性提高很多,比如用户可以给APP赋予摄像的权限,也可以使用权限。

2. 代码

在Android6.0以上多了一个运行时权限问题

下面我们以SD卡来说明一下:

    public void savaFileToSD(String filename, String filecontent) throws Exception {
//如果手机已插入sd卡,且app具有读写sd卡的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
int REQUEST_EXTERNAL_STORAGE = ; filename = Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename;
Log.d(TAG,"文件名:"+filename); try {
//检测是否有写的权限
int permission = context.checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
requestPermissions(context, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
Log.d(TAG, "没有权限");
}else {
Log.d(TAG, "有权限");
}
} catch (Exception e) {
e.printStackTrace();
} //这里就不要用openFileOutput了,那个是往手机内存中写数据的
FileOutputStream output = new FileOutputStream(filename); output.write(filecontent.getBytes());
//将String字符串以字节流的形式写入到输出流中
output.close();
//关闭输出流
} else Toast.makeText(context, "SD卡不存在或者不可读写", Toast.LENGTH_SHORT).show();
}

最新文章

  1. OAF_开发系列10_实现OAF动态LOV设定
  2. ShooterGame 学习笔记1 PlayerPawn的两个Mesh的可见性
  3. Eclipse添加注释简介
  4. Linux第七次实验笔记
  5. UVA 10003 Cutting Sticks
  6. Effective C++(12) 复制对象时要复制每一个成员
  7. /etc/fstab 文件解释
  8. Qt Quick编程(1)——QML的核心部分ECMAScript
  9. PIC单片机状态寄存器中的C(进位/借位位标志)
  10. SpringBoot整合Shiro使用Ehcache等缓存无效问题
  11. 2017.11.6 - ant design table等组件的使用,以及 chrome 中 network 的使用
  12. [转载]How To Install Nginx And PHP-FPM On CentOS 6 Via Yum
  13. 模版方法模式(Template Method)
  14. EXCEL2007出错了无法使用文档中的ActiveX 控件
  15. 移植Python3到TQ2440(二)
  16. [nQSError: 37001]Could not connect to the Oracle BI Server Instance
  17. Java并发编程原理与实战二十六:闭锁 CountDownLatch
  18. Oracle用imp导入dmp 提示遇到 ORACLE 错误 12560 TNS: 协议适配器错误 解决方法
  19. python碎片记录(三)
  20. 第九章 消息总线: Spring Cloud Bus

热门文章

  1. 【javascript】点击复制内容的实现
  2. mac下wordpress环境搭建
  3. uploadPreview 上传图片前预览 IE9 索引无效的问题
  4. CTF中密码学一些基础
  5. AsyncTask的工作原理
  6. canvas绘制简单的霓虹灯效果
  7. 架构师养成记--30.Redis环境搭建
  8. Java多线程—阻塞队列和生产者-消费者模式
  9. localhost, 127.0.0.1, 0.0.0.0
  10. Python基础部分的疑惑解析——运算符和数据类型(5)