赞
踩
Android 安全架构的中心设计点是:在默认情况下任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读取或写入用户的私有数据(例如联系人或电子邮件)、读取或写入其他应用程序的文件、执行网络访问、使设备保持唤醒状态等。
从 Android 6.0(API 级别 23)开始,无论您的应用面向哪个 API 级别,您都应对应用进行测试,以验证它在缺少需要的权限时行为是否正常。
应用可以通过 Activity,Fragment,和 Context 类(建议使用 Support 包中的对应类,如 ContextCompat)中三个方法和一个回调,与用户协调动态权限的授权:
对于两个特殊权限 SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS,必须通过下面的方式判断授权情况,并通过 startActivity 来跳转到权限设置页去授权:
对于location权限,还需要通过 LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)判断是否打开定位开关。
在使用 Android 权限时,需要遵循以下原则:
1、最少原则,只使用 APP 所必需的权限。可能还有其他方法能实现同样的需求,而无需访问敏感信息。
2、全面原则,应用需考虑第三方库所需的权限,当 APP 包含一个库时,会继承其权限要求。
3、清晰原则,当您发出权限请求时,要让用户明白正在访问的内容以及为什么要访问,以便用户做出明智的决定。
4、显式原则,当您访问敏感功能(例如相机或麦克风)时,提供连续的提示可以让用户清楚您在收集数据,避免让用户感觉您在偷偷收集数据。
例如,您需要用设备的 Camera 来拍照,你可以通过调用 Camera 的 API 来实现这个功能,但是这需要请求 Camera 的权限;你也可以你 Intent 启动 Camera 模块来实现这个功能,但是不需要请求 Camera 的权限。
例如,媒体播放器在通话期间静音或暂停,是使用 PhoneStateListener 监听呼叫状态的更改或监听android.intent.action.PHONE_STATE的广播。该解决方案的问题是它需要 READ_PHONE_STATE权限,这需要用户同意访问敏感数据(例如其设备和 SIM 硬件 ID 以及来电的电话号码)。您可以通过为您的应用请求 AudioFocus 来避免这种情况,因为它不需要明确的权限(因为它不访问敏感信息)。只需将音频切换到后台时所需的代码放在 onAudioFocusChange()事件处理程序中,当操作系统移动切换其音频焦点时它将自动运行。
从 Android 6.0(API级别 23)开始,用户开始在应用运行时向其授予危险权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。用户可以随时进入应用的“Settings”中调整应用的动态权限授权。
在所有版本的 Android 中,您应用都需要在其应用 Manifest 中同时声明它需要的正常权限和危险权限。不过,该声明的影响因系统版本和应用的 targetSdkVersion的不同而有所差异:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。