专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
郭霖  ·  Android ... ·  4 天前  
郭霖  ·  Android ... ·  1 周前  
鸿洋  ·  一个大型 Android 项目的模块划分哲学 ·  1 周前  
51好读  ›  专栏  ›  安卓开发精选

Android 中 uses-feature 和 uses-permission的作用 关系和区别

安卓开发精选  · 公众号  · android  · 2016-08-28 08:43

正文

(点击上方公众号,可快速关注)


来源:伯乐在线专栏作者 - dreamist

链接:http://android.jobbole.com/84444/

点击 → 了解如何加入专栏作者


前言


在android开发中,关于手机权限的获取我们在mainfest中有两个常用的标签,users-feature 和 uses-permission。今天我们来研究以下这两个标签具体的作用,以及它们之间的关系和区别。


基本功能


1. uses-feature


作用:


定义一个该app会用到的硬件或者软件功能。(android 系统提供的可以选择的功能列表参考:Features Reference)。标签的目的是用来描述该app所依赖的硬件和软件的功能有哪些,并不负责向系统去请求权限,比如说,app用到了相机的功能,用户可以在uses-feature 中定义一个照相机的功能,但是这个时候app并没有去请求系统赋予该app照相机权限,想要正常使用照相机的话,还需要在uses-permission标签中再去请求照相机权限(或者在代码中动态地请求权限)


语法:


uses-feature

  android:name="string"

  android:required=["true" | "false"]

  android:glEsVersion="integer" />


属性值含义:


属性|含义

—|—

android:name | app需要定义的功能的名称

android:required | 为ture时表示该功能对于app来说是必须有的,如果某一设备不具备该功能,google play 商店将会对该设备隐藏该app;为false时表示该功能对于app来说时非必需的,即使某一设备不具备该功能,google play商店仍然会对该设备显示该app

android:glEsVersion | 指定openGL ES的版本号,只针对open GL功能


2. uses-permission


作用:


告诉系统让系统向用户请求指定的权限供该app使用。


语法:


uses-permission android:name="string"

        android:maxSdkVersion="integer" />


属性值含义:


属性|含义

—|—

android:name | app需要请求的权限的名称,可以时一个标准的系统权限(系统权限),也可以时app自己定义的一个权限,也可以时在其它app中定义的权限

android:maxSdkVersion | 设置需要该权限的app API的最大版本号,因为android额有些权限在较新的版本中没必要再去请求了。


uses-feature 和 uses-permission 的关系和区别


由以上所述,它们两个之间其实没多少关系,一个负责描述app会用到什么功能,一个负责向系统请求app所需要的权限,它们经常会搭配在一起使用。开发者应该根据自己的实际需求来使用对应的标签。


uses-feature的作用更像是一个过滤器,google play 商店会根据该标签来过滤设备,比如用户在uses-feature中声明了要使用相机,这时候在google play商店中该app就不再对没有照相机的设备显示。但是,如果用户同时也设置了uses-feature的属性android:required 为false的话,google play商店仍然会对没有照相机的设备显示该app。


uses-permission 则像是一个权限助手,帮助app去向用户请求app需要使用的权限。


一个典型的例子


假如现在需要开发一个app,它是一个聊天的工具,包含给对方发送照片的功能,所以会用到系统的照相机。但是,该app的主要功能还是聊天,就算是在一个没有照相机的手机上也应该能够让它正常地使用聊天的功能。


根据以上的描述(微信就满足上述的条件),该app的manifest文件中可以这样配置照相机相关的权限和功能。


manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.demo" >

    uses-permission android:name="android.permission.CAMERA" />

    

    uses-feature

        android:name="android.hardware.camera"

        android:required=false />

manifest>


参考资料:


  • https://developer.android.com/guide/topics/manifest/uses-feature-element.html

  • https://developer.android.com/guide/topics/manifest/uses-permission-element.html

  • https://developer.android.com/guide/topics/security/permissions.html

  • http://stackoverflow.com/questions/28079449/uses-permission-vs-uses-feature