Android数据手册02:android.permission权限请求汇总

本文详细列举了Android开发中可能用到的所有权限请求,包括位置、网络、电话、相机等多个方面,并说明了每个权限的作用。

  在Android开发中,当程序执行需要操作安全敏感项时,必须在androidmanifest.xml中声明相关权限请求。

  比如,声明拨打电话的权限请求方法如下:

1   <uses-permission 
2     android:name="android.permission.CALL_PHONE"    />

  其他的权限声明方法与上面的类似,Android具体权限请求可以参阅Android API帮助文档,本文整理了该文档中的全部权限请求,汇总如下。

 

  android.permission.ACCESS_CHECKIN_PROPERTIES  

  允许程序在登记的数据库中读写访问“properties”表,改值并上传数据( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded)  

 

  android.permission.ACCESS_COARSE_LOCATION 

  允许程序获取粗略的位置(比如Cell-ID,WiFi)(Allows an application to access coarse (e.g., Cell-ID, WiFi) location)  

 

  android.permission.ACCESS_FINE_LOCATION  

  允许程序访问精确位置(如GPS) (Allows an application to access fine (e.g., GPS) location)  

 

  android.permission.ACCESS_LOCATION_EXTRA_COMMANDS  

  允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands)  

 

  android.permission.ACCESS_MOCK_LOCATION  

  允许程序创建模拟位置用于测试(Allows an application to create mock location providers for testing)  

 

  android.permission.ACCESS_NETWORK_STATE  

  允许程序访问网络信息(Allows applications to access information about networks)  

 

  android.permission.ACCESS_SURFACE_FLINGER  

  允许程序使用SurfaceFlinger底层特性(Allows an application to use SurfaceFlinger’s low level features)  

 

  android.permission.ACCESS_WIFI_STATE  

  允许程序访问Wi-Fi网络(Allows applications to access information about Wi-Fi networks)  

 

  android.permission.ADD_SYSTEM_SERVICE  

  允许程序发布系统级服务(Allows an application to publish system-level services).  

 

  android.permission.BATTERY_STATS  

  允许程序更新统计的手机电池信息(Allows an application to update the collected battery statistics)  

 

  android.permission.BLUETOOTH  

  允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices)  

 

  android.permission.BLUETOOTH_ADMIN  

  允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices)  

 

  android.permission.BRICK  

  请求使用禁用设备(非常危险)(Required to be able to disable the device (very *erous!).)  

 

  android.permission.BROADCAST_PACKAGE_REMOVED  

  允许程序在一个应用程序包移除后广播一个提示消息(Allows an application to broadcast a notification that an application package has been removed)  

 

  android.permission.BROADCAST_STICKY  

  允许一个程序广播sticky intents(Allows an application to broadcast sticky intents)  

 

  android.permission.CALL_PHONE  

  允许程序不通过拨号界面和用户确认而直接拨打一个电话(Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.)  

 

  android.permission.CALL_PRIVILEGED  

  允许程序拨打任何号码(包含紧急号码),无需通过拨号用户界面和用户确认(Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed)  

 

  android.permission.CAMERA  

  请求使用照相设备(Required to be able to access the camera device. )  

 

  android.permission.CHANGE_COMPONENT_ENABLED_STATE  

  允许应用发生改变,当其组件启用或禁用时(Allows an application to change whether an application component (other than its own) is enabled or not. )  

 

  android.permission.CHANGE_CONFIGURATION  

  允许程序修改当前配置(Allows an application to modify the current configuration, such as locale. )  

 

  android.permission.CHANGE_NETWORK_STATE  

  允许程序改变网络连接状态(Allows applications to change network connectivity state)  

 

  android.permission.CHANGE_WIFI_STATE  

  允许程序改变Wi-Fi连接状态(Allows applications to change Wi-Fi connectivity state)  

 

  android.permission.CLEAR_APP_CACHE  

  允许程序清除设备上所有已安装应用的缓存(Allows an application to clear the caches of all installed applications on the device. )  

 

  android.permission.CLEAR_APP_USER_DATA  

  允许一个程序清除用户设置(Allows an application to clear user data)  

 

  android.permission.CONTROL_LOCATION_UPDATES  

  允许启用/禁止从无线设备获取的位置更新提示(Allows enabling/disabling location update notifications from the radio. )  

 

  android.permission.DELETE_CACHE_FILES  

  允许程序删除缓存文件(Allows an application to delete cache files)  

 

  android.permission.DELETE_PACKAGES  

  允许程序删除包(Allows an application to delete packages)  

 

  android.permission.DEVICE_POWER  

  允许访问底层电源管理(Allows low-level access to power management)   

 

  android.permission.DISABLE_KEYGUARD  

  允许程序禁用键盘锁(Allows applications to disable the keyguard )  

 

  android.permission.DUMP  

  允许程序从系统服务抓取信息并返回状态(Allows an application to retrieve state dump information from system services.)  

  android.permission.EXPAND_STATUS_BAR  

  允许程序扩展收缩状态栏(Allows an application to expand or collapse the status bar. )  

 

  android.permission.FACTORY_TEST  

  作为一个工厂测试程序,使用root用户来运行(Run as a manufacturer test application, running as the root user. )  

 

  android.permission.FLASHLIGHT  

  允许访问闪光灯(Allows access to the flashlight )  

 

  android.permission.FORCE_BACK  

  允许程序强行后退操作无论是否在顶层activity(Allows an application to force a BACK operation on whatever is the top activity. )   

 

  android.permission.GET_ACCOUNTS  

  访问Accounts Service中的帐户列表(Allows access to the list of accounts in the Accounts Service)  

 

  android.permission.GET_PACKAGE_SIZE  

  允许程序获取任何package所占用的空间容量(Allows an application to find out the space used by any package. )  

 

  android.permission.GET_TASKS  

  允许程序获取当前或最近运行的任务的有关信息,如缩略任务状态,是否活动等等(Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.)  

 

  android.permission.HARDWARE_TEST  

  允许访问硬件(Allows access to hardware peripherals. )  

 

  android.permission.INJECT_EVENTS  

  允许程序截获用户事件(如按键、触摸、轨迹球等等)到事件流(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.)  

 

  android.permission.INSTALL_PACKAGES  

  允许程序安装packages(Allows an application to install packages. )  

 

  android.permission.INTERNAL_SYSTEM_WINDOW  

  允许打开窗口使用系统用户界面(Allows an application to open windows that are for use by parts of the system user interface. )  

 

  android.permission.INTERNET  

  允许程序打开网络套接字(Allows applications to open network sockets)  

 

  android.permission.MANAGE_APP_TOKENS  

  允许应用程序的窗口管理器管理(创建、销毁、Z-order)应用程序(Allows an application to manage (create, destroy, Z-order) application tokens in the window manager. )  

 

  android.permission.MODIFY_AUDIO_SETTINGS  

  允许程序修改全局音频设置(Allows an application to modify global audio settings)  

 

  android.permission.MODIFY_PHONE_STATE  

  允许修改话机状态,如电源,人机接口等(Allows modification of the telephony state – power on, mmi, etc. )  

 

  android.permission.MOUNT_UNMOUNT_FILESYSTEMS  

  允许挂载和卸载可移动存储文件系统(Allows mounting and unmounting file systems for removable storage. )  

 

  android.permission.PERSISTENT_ACTIVITY  

  允许程序设置其Activity持久(Allow an application to make its activities persistent. )  

 

  android.permission.PROCESS_OUTGOING_CALLS  

  允许程序监视、修改或终止呼叫(Allows an application to monitor, modify, or abort outgoing calls)  

 

  android.permission.READ_CALENDAR  

  允许程序读取用户日历数据(Allows an application to read the user’s calendar data.)  

 

  android.permission.READ_CONTACTS  

  允许程序读取用户联系人数据(Allows an application to read the user’s contacts data.)   

 

   android.permission.READ_FRAME_BUFFER  

  允许程序进行屏幕截图或和访问帧缓冲区数据(Allows an application to take screen shots and more generally get access to the frame buffer data)  

 

  android.permission.READ_INPUT_STATE  

  允许程序返回当前按键状态(Allows an application to retrieve the current state of keys and switches. )   

 

  android.permission.READ_LOGS  

  允许程序读取底层系统日志文件(Allows an application to read the low-level system log files. )    

 

  android.permission.READ_OWNER_DATA  

  允许程序读取持有者数据(Allows an application to read the owner’s data)   

 

  android.permission.READ_SMS  

  允许程序读取短信息(Allows an application to read SMS messages.)   

 

   android.permission.READ_SYNC_SETTINGS  

  允许程序读取同步设置(Allows applications to read the sync settings)   

 

   android.permission.READ_SYNC_STATS  

  允许程序读取同步状态(Allows applications to read the sync stats)    

 

  android.permission.REBOOT  

  请求重启设备(Required to be able to reboot the device. )    

 

  android.permission.RECEIVE_BOOT_COMPLETED  

  允许程序在系统启动完成后接收ACTION_BOOT_COMPLETED广播(Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. )    

 

  android.permission.RECEIVE_MMS  

  允许程序监视收到的彩信,进行记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. )  

 

  android.permission.RECEIVE_SMS  

  允许程序监视收到的短信息,进行记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.)    

 

  android.permission.RECEIVE_WAP_PUSH  

  允许程序监视来自WAP的信息(Allows an application to monitor incoming WAP push messages. )  

 

  android.permission.RECORD_AUDIO  

  允许程序录制音频(Allows an application to record audio)  

 

  android.permission.REORDER_TASKS  

  允许程序改变Z-order(Allows an application to change the Z-order of tasks)    

 

  android.permission.RESTART_PACKAGES  

  允许程序重启其他程序(Allows an application to restart other applications)    

 

  android.permission.SEND_SMS  

  允许程序发送SMS短信(Allows an application to send SMS messages)    

 

  android.permission.SET_ACTIVITY_WATCHER  

  允许程序监控或控制在全局系统中启动的Activity(Allows an application to watch and control how activities are started globally in the system.)   

 

  android.permission.SET_ALWAYS_FINISH  

  允许程序控制Activity是否放在后台间接运行完成(Allows an application to control whether activities are immediately finished when put in the background.)    

 

  android.permission.SET_ANIMATION_SCALE  

  修改全局动画比例(Modify the global animation scaling factor.)    

 

  android.permission.SET_DEBUG_APP  

  配置用于调试的程序(Configure an application for debugging.)    

 

  android.permission.SET_ORIENTATION  

  允许访问底层屏幕方向设置和实际旋转(Allows low-level access to setting the orientation (actually rotation) of the screen.)    

 

  android.permission.SET_PREFERRED_APPLICATIONS  

  允许程序修改列表参数PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()方法(Allows an application to modify the list of preferred applications with the PackageManager.addPackageToPreferred() and PackageManager.removePackageFromPreferred() methods.)    

 

  android.permission.SET_PROCESS_FOREGROUND  

  允许强行当前运行程序到前台(Allows an application to force any currently running process to be in the foreground.)    

 

  android.permission.SET_PROCESS_LIMIT  

  允许设置最大的运行进程数量(Allows an application to set the maximum number of (not needed) application processes that can be running. )    

 

  android.permission.SET_TIME_ZONE  

  允许程序设置时区(Allows applications to set the system time zone)    

 

  android.permission.SET_WALLPAPER  

  允许程序设置壁纸(Allows applications to set the wallpaper )    

 

  android.permission.SET_WALLPAPER_HINTS  

  允许程序设置默认壁纸(Allows applications to set the wallpaper hints)    

 

  android.permission.SIGNAL_PERSISTENT_PROCESSES  

  允许程序将请求信号发送到所有显示的进程中(Allow an application to request that a signal be sent to all persistent processes)    

 

  android.permission.STATUS_BAR  

  允许程序打开、关闭或禁用状态栏及图标(Allows an application to open, close, or disable the status bar and its icons.)

 

  android.permission.SUBSCRIBED_FEEDS_READ  

  允许程序访问订阅RSS内容提供者(Allows an application to allow access the subscribed feeds ContentProvider. )    

 

  android.permission.SYSTEM_ALERT_WINDOW  

  允许程序使用TYPE_SYSTEM_ALERT类型打开窗口,显示在其他所有程序的顶层(Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications. )    

 

  android.permission.VIBRATE  

  允许访问振动设备(Allows access to the vibrator)    

 

  android.permission.WAKE_LOCK  

  允许使用PowerManager WakeLocks保持进程,在休眠时使屏幕变暗( Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming)    

 

  android.permission.WRITE_APN_SETTINGS  

  允许程序写入APN设置(Allows applications to write the apn settings)   

 

  android.permission.WRITE_CALENDAR  

  允许程序写入但不读取用户日历数据(Allows an application to write (but not read) the user’s calendar data. )    

 

  android.permission.WRITE_CONTACTS  

  允许程序写入但不读取用户联系人数据(Allows an application to write (but not read) the user’s contacts data. )    

 

  android.permission.WRITE_GSERVICES  

  允许程序修改Google服务地图(Allows an application to modify the Google service map. )    

 

  android.permission.WRITE_OWNER_DATA  

  允许程序写入但不读取持有者数据(Allows an application to write (but not read) the owner’s data.)   

 

  android.permission.WRITE_SETTINGS  

  允许程序读取或写入系统设置(Allows an application to read or write the system settings. )    

 

  android.permission.WRITE_SMS  

  允许程序写短信(Allows an application to write SMS messages)    

 

  android.permission.WRITE_SYNC_SETTINGS  

  允许程序写入同步设置(Allows applications to write the sync settings)  

 

转载于:https://www.cnblogs.com/menlsh/archive/2013/03/27/2985780.html

<think>我们正在讨论Android14升级到Android15时出现的java.lang.AssertionError,特别提到权限无法默认授予,涉及targetSDK35以及蓝牙权限、READ_SMS和ACCESS_FINE_LOCATION。根据错误信息,这通常发生在应用尝试在Android15(API级别35)上运行时,但某些权限的授予方式发生了变化。在Android中,权限模型随着版本更新而不断变化。特别是在Android15(targetSDK35)中,一些权限的行为可能发生了变化。我们注意到错误是`java.lang.AssertionError:permissioncannotbegrantedbydefault`。这意味着在代码中有一个断言(assert)检查,该检查失败,因为某个权限不应该被默认授予,但可能代码中假设它已被授予。可能的原因:1.**权限声明问题**:在AndroidManifest.xml中声明了权限,但可能没有正确声明或使用。2.**权限请求流程变化**:在Android15中,某些权限可能需要运行时请求,而以前版本中可能是安装时授予或自动授予。3.**targetSDK升级到35**:当应用以targetSDK35运行时,必须遵循Android15的新行为。特别是,一些权限可能被归类为“install-time”或“runtime”权限,或者某些权限可能被移除或更改。具体到提到的权限:-`READ_SMS`:这是一个危险权限,从Android6.0(API23)开始就需要运行时请求。-`ACCESS_FINE_LOCATION`:同样是危险权限,需要运行时请求。-蓝牙权限:在较新的Android版本中,蓝牙权限也分为普通权限和危险权限。例如,在Android12(API31)中,`BLUETOOTH_SCAN`、`BLUETOOTH_CONNECT`等需要运行时请求。然而,在Android15中,权限模型可能进一步调整。针对这个错误,我们需要检查代码中是否有地方使用了`assert`语句来检查权限是否被授予,但事实上这些权限并未被授予(或不能被默认授予)。**解决步骤:**1.**检查断言位置**:找到抛出此异常的断言语句。通常,这样的断言可能在开发阶段的测试代码中,用于确保权限已被授予。但在生产代码中不应使用断言(因为断言可以在JVM中被禁用)。2.**运行时权限请求**:确保所有危险权限(包括蓝牙相关权限、READ_SMS、ACCESS_FINE_LOCATION)都在使用前通过运行时权限请求(使用`ActivityCompat.requestPermissions`或类似方法)获取。3.**检查AndroidManifest.xml**:-确保所有需要的权限都被声明。-注意在Android15中,一些权限可能被废弃或需要新的替代权限。例如,在Android10(API29)中,对SMS和通话日志权限有更严格的保护,而Android12对蓝牙权限进行了调整。4.**处理targetSDK35**:当targetSDK设置为35时,必须适应Android15的新行为。请查阅Android15的变更文档,特别是权限相关变更。5.**移除断言或替换为适当检查**:断言不应用于生产代码中的权限检查。应该使用权限检查API(如`ContextCompat.checkSelfPermission`)来验证权限,并在没有权限请求。例如,在代码中如果发现类似:assertContextCompat.checkSelfPermission(context,permission)==PackageManager.PERMISSION_GRANTED;应该移除此断言,并改为正常的逻辑处理(请求权限或执行降级操作)。6.**测试**:在Android15设备或模拟器上测试应用,确保所有权限按预期请求和授予。7.**查阅已知问题**:查看Android15的发布说明,是否有关于权限的已知问题,特别是与蓝牙、SMS和位置相关的权限。**特别注意蓝牙权限**:在Android12中,蓝牙权限进行了重大更改。如果你的应用在Android14上以targetSDK低于31运行,可能使用旧的蓝牙权限(如`BLUETOOTH`和`BLUETOOTH_ADMIN`),但当升级到targetSDK35时,必须使用新的蓝牙权限(`BLUETOOTH_SCAN`,`BLUETOOTH_CONNECT`,`BLUETOOTH_ADVERTISE`)。此外,对于附近的设备,还需要声明`ACCESS_FINE_LOCATION`,并且在Android12及以上,当使用蓝牙扫描时,还需要在运行时请求位置权限。因此,请确保在AndroidManifest.xml中声明了适当的权限,并根据需要请求它们。**示例代码调整:**替换断言:原代码可能有:assertcheckPermission(Manifest.permission.ACCESS_FINE_LOCATION);改为:if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){//请求权限ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_CODE_LOCATION);}else{//已经有权限,继续执行}然后,在`onRequestPermissionsResult`中处理结果。**结论**:升级到Android15时,需要确保应用遵循新的权限要求,特别是将targetSDK升级到35后。移除任何使用断言进行权限检查的代码,改用标准的运行时权限请求流程。如果问题仍然存在,请检查具体的堆栈跟踪,定位到抛出AssertionError的代码行,然后根据上述原则进行修复。相关问题:1.Android15中,还有哪些权限变更可能影响应用?2.如何正确地请求多个危险权限?3.在targetSDK升级到35时,还有哪些其他需要注意的变更?</think> ### 解决 Android 14 升级 Android 15 时的 `java.lang.AssertionError` 权限问题 针对您在升级到 Android 15 (targetSDK 35) 时遇到的 `java.lang.AssertionError`,特别是涉及蓝牙权限 `READ_SMS` 和 `ACCESS_FINE_LOCATION` 无法默认授予的问题,以下是系统级原因和解决方案: --- #### **核心问题分析** 1. **权限模型变更** Android 15 (API 35) 加强了权限策略: - 不再允许**默认授予**高危权限(如 `READ_SMS`, `ACCESS_FINE_LOCATION`, 蓝牙权限)[^1] - 所有权限必须在运行时动态申请,即使声明在 `AndroidManifest.xml` 2. **AssertionError 触发机制** `java.lang.AssertionError` 通常由以下操作触发: ```java // 错误示例:在未请求权限时断言已授权 assert checkSelfPermission(READ_SMS) == PERMISSION_GRANTED; ``` 3. **蓝牙权限变化** Android 15 对蓝牙权限 (`BLUETOOTH_CONNECT`, `BLUETOOTH_SCAN`) 引入额外限制: - 需要同时申请位置权限 `ACCESS_FINE_LOCATION`[^2] - 旧版 targetSDK 的静默授权行为已被废弃 --- #### **解决方案** 1. **移除权限断言代码** 删除所有 `assert` 权限检查的代码段: ```java // ❌ 删除此类断言 assert checkSelfPermission(Manifest.permission.READ_SMS) == PERMISSION_GRANTED; ``` 2. **实现运行时权限请求** 使用标准权限请求流程: ```java // ✅ 正确方式:动态请求权限 String[] requiredPermissions = { Manifest.permission.READ_SMS, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH_CONNECT }; if (ContextCompat.checkSelfPermission(this, requiredPermissions[0]) != PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, requiredPermissions, REQUEST_CODE); } ``` 3. **更新蓝牙权限处理策略** Android 15 强制要求: - 在 `AndroidManifest.xml` 声明新权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> ``` - 按需添加 `usesPermissionFlags`: ```xml <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> ``` 4. **适配 targetSdkVersion 35** 在 `build.gradle` 中显式声明: ```gradle android { targetSdkVersion 35 } ``` 并确保在 Android 15+ 真机上进行测试 --- #### **验证流程** 1. 使用新权限检查工具: ```bash adb shell pm list permissions -g -d ``` 2. 检查 Logcat 过滤标签: ```log Adb logcat | grep "PermissionController" ``` 3. 测试用户拒绝权限时的降级逻辑 --- #### **关键官方变更参考** - [Android 15 权限变更文档](https://developer.android.com/about/versions/15/behavior-changes-15#runtime-permissions) [^1] - [蓝牙权限迁移指南](https://developer.android.com/guide/topics/connectivity/bluetooth/permissions) [^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值