Android 程序申请权限注意事项

为Android 程序申请权限注意

Android系统提供为程序提供了权限申请,即在manifest中使用uses-permission来申请即可.实现起来非常简单,但是有些问题会随之浮出水面. 常见的现象是,有时候新加一个权限,(在Google Play上)程序显示的支持的设备会减少.

为什么权限越多,支持设备越少

因为有些权限隐式地需要feature,即当你显示使用uses-permission,会默认地为程序加入uses-feature.
而Android以及Google Play判断是否可以安装和现实的依据是,设备包含的system features是否完全包含程序申请的全部features. 只有在全部满足了程序需要的feature的设备上才可以展示并安装.

如何查看程序使用了哪些features

使用aapt dump badging your_apk_file_path,具体可以参考获取程序需要的features

如何查看设备具有的features

Android提供了该API,具体参考获取系统支持的features

举个例子

我们在程序manifest加入一行申请摄像头的权限.

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

然后查看程序加入的feature

14:29 $ aapt dump badging PermissionDemo.apk | grep uses-feature

我们就会发现,这两个权限是新加的

uses-feature:'android.hardware.camera'
uses-feature:'android.hardware.camera.autofocus'

解决问题:如何加权限,不减少支持设备

如果你增加的权限并且及引入的feature不是必须使用的,可以显示地将该feature设置为不需要.继续上面的例子.在manifest中加入

<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>

重新生成程序.再次查看需要的权限.

14:29 $ aapt dump badging PermissionDemo.apk | grep uses-feature
uses-feature-not-required:'android.hardware.camera.autofocus'
uses-feature-not-required:'android.hardware.camera'
uses-feature:'android.hardware.touchscreen'

就这样,可以做到增加权限,同时保证支持设备不减少.

Show Me The Code

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.droidyue.demo.permission"
  android:versionCode="1"
  android:versionName="1.0" >

  <uses-permission android:name="android.permission.CAMERA" />
  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
 <uses-feature android:name="android.hardware.camera" android:required="false"/>

  <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="19" />

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
  </application>
</manifest>

延伸阅读

http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions

以上就是对Android 程序申请权限的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

(0)

相关推荐

  • Android 读取Properties配置文件的小例子

    开发应用的时候会有一些有可能会变得值,例如webservice地址 应用的一些ID等等,之前一直都是直接在应用中改代码,不是忘点这忘点那,于是想到了可以用Properties配置文件,我把网址等变量配置的配置文件中,这样之后再改的话就直接改配置文件就行了,就不用改代码了下面给大家说说Properties的用法 复制代码 代码如下: public static String getPropertiesURL(Context c, String s) {  String url = null;  P

  • 深入AndroidManifest.xml文件解析详解

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置. 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

  • AndroidManifest.xml配置文件解析

    AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <manifest> <!-- 基本配置 --> <uses-permission /> <permi

  • Android 6.0权限申请详解及权限资料整理

    在android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请. 一.权限的申请两步骤: 1.权限申请: /** * @param permissions需要申请的权限 * @param requestCode申请回调code */ public static void requestPermissions(final @NonNull Activity activity,final @

  • Android获取设备隐私 忽略6.0权限管理

    一.前言 (1).由于MIUI等部分国产定制系统也有权限管理,没有相关api,故无法判断用户是否允许获取联系人等隐私.在Android 6.0之后,新增权限管理可以通过官方api判断用户的运行状态: (2).我们指定targetSdkVersion为23或者之后我们还需要在运行时请求这些所需的权限.这很重要,因为已经出现了很多开发者把targetSdkVersion飙到了最新,然后发现自己的app疯狂的崩溃,这是由于他们没有实现执行运行时权限请求的代码.当你已经把一个targeting API

  • 详解Android系统中的root权限获得原理

    前言 一直很好奇Android Root的原理,恰好最近碰到了一个跟Android默认带Root权限的问题,这里顺便记录一下Android系统root的原理. 原理 Android是基于Llinux内核的开源操作系统,与Ubuntu系统类似,所以在Android里获取root权限其实和在Linux系统下获取root权限是一回事.在Linux系统下获取root权限的方法是在命令行执行sudo或者su,接下来输入提权密码就可以获取root权限了.Android系统其实也是这样,例如应用层程序开发,在

  • Android学习笔记之AndroidManifest.xml文件解析(详解)

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置. 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

  • Android 权限(permission)整理

    在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,否则将无法正常工作.在Android中这样的权限有很多种,这里将各类访问权限一一罗列出来,供大家使用时参考之用. 1.android.permission.WRITE_USER_DICTIONARY 允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS 写入Google在线同步设置 3.android.permission.WRITE_SOCIAL_

  • AndroidManifest.xml uses-feature功能详解

    本文实例讲述了AndroidManifest.xml uses-feature功能.分享给大家供大家参考,具体如下: 如果你是一个Android用户,而且你有一个老旧的安装有android 1.5 的android设备,你可能会注意到一些高版本的应用没有在手机上的Android Market 中显示.这必定是应用使用了<uses-feature>的结果. Android Market会根据uses-feature过滤所有你设备不支持的应用.通过使用<uses-feature>元素,

  • 在AndroidManifest.xml中uses-sdk内属性意思

    在AndroidMenifest.xml中,常常会有下面的语句: 复制代码 代码如下: <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="10" android:maxSdkVersion="10" /> 在default.properties中,会看到下面的语句: target=android-10 如果是使用Eclipse的话,还可能会看到这样的警告: At

  • Ubuntu下android adb环境变量配置方法

    系统:linux ubuntu12 1. 配置环境变量 复制代码 代码如下: sudo gedit /etc/profile 在文件的最后追加一下内容(your_android-sdk-linux_path是绝对路径): 复制代码 代码如下: #set path for android sdk tools export PATH=$PATH:/your_android-sdk-linux_path/tools/ export PATH=$PATH:/your_android-sdk-linux_

  • Android获取手机配置信息具体实现代码

    复制代码 代码如下: StringBuilder phoneInfo = new StringBuilder(); phoneInfo.append("Product: " + android.os.Build.PRODUCT + System.getProperty("line.separator")); phoneInfo.append( "CPU_ABI: " + android.os.Build.CPU_ABI + System.getP

随机推荐