Android体系安全权限

打印 上一主题 下一主题

主题 551|帖子 551|积分 1653

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()变乱处置惩罚步伐中,当操作体系移动切换其音频焦点时它将主动运行。


  • 平凡权限(normal permission):也叫正常权限,即使拥有了该类权限,用户的隐私数据被泄漏窜改的风险也很小。例如,设置时区的权限就是正常权限。如果应用声明其需要正常权限,体系会主动向应用授予该权限。
  • 敏感权限(dangerous permission):也叫伤害权限,运行时权限,跟平凡权限相反,一旦某个应该获取了该类权限,用户的隐私数据就面对被泄漏窜改的风险。好比 READ_CONTACTS 权限就属于伤害权限。如果应用声明其需要伤害权限,则用户必须明确向应用授予该权限。
  • 签名权限(signature permission):该类权限只对拥有相同签名的应用开放,好比手机QQ 自定义了一个permission 且在权限标签中参加 android:protectionLevel=”signature”,而访问它的某个数据时,必须要拥有该权限。然后微信和 QQ 发布时接纳相同的签名,微信就可以申请访问 QQ 中的此权限,并使用对应权限控制的数据。其他步伐即使知道了这个开放数据的接口,也在 Manifest 注册了权限,但由于应用签名不同,还是无法访问的对应的数据。
  • 体系签名权限(signatureOrSystem permission):与 signature permission雷同,但它不光要求签名相同,还要求是同类的体系级应用,一般手机厂商开发的预制应用,才会用到该类权限。
  • 动态权限机制及使用

    从 Android 6.0(API级别 23)开始,用户开始在应用运行时向其授予伤害权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。用户可以随时进入应用的“Settings”中调整应用的动态权限授权。
    在全部版本的 Android 中,您应用都需要在其应用 Manifest 中同时声明它需要的正常权限和伤害权限。不过,该声明的影响因体系版本和应用的 targetSdkVersion的不同而有所差异:
  • 如果装备运行的是 Android 5.1 或更低版本,大概应用的 targetSdkVersion 为 22 或更低:如果您在 Manifest 中列出了伤害权限,则用户必须在安装应用时授予此权限;如果他们不授予此权限,体系根本不会安装应用。如果将新权限添加到更新的应用版本,体系会在用户更新应用时要求授予该权限。用户一旦安装应用,他们撤销权限的唯一方式是卸载应用。
  • 如果装备运行的是 Android 6.0 或更高版本,而且应用的 targetSdkVersion为23 或更高:应用必须在 Manifest 中列出权限,而且它必须在运行时请求其需要的每项伤害权限。用户可以授予或拒绝每项权限,且即使用户拒绝权限请求,应用仍可以继承运行有限的功能。
  • checkSelfPermission:检查动态权限,返回PackageManager.PERMISSION_GRANTED或PackageManager.PERMISSION_DENIED
  • shouldShowRequestPermissionRationale:检查用户禁止了此动态权限框跳出,应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。
  • requestPermissions:请求动态权限,体系会弹出权限授权提示框给用户,用户可以选择授权和拒绝。选择结果通过 Activity 或 Fragment 的 onRequestPermissionsResult 担当。
  • onRequestPermissionsResult:动态权限申请结果,根据请求的requestCode和grantResults是否PERMISSION_GRANTED来判断用户是否授权。
  • Settings.canDrawOverlays()。
  • Settings.System.canWrite()。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表