android 11以上获取SYSTEM_ALERT_WINDOW权限
时间: 2024-10-10 20:16:56 浏览: 161
在Android 11及以上版本中,由于隐私政策的变化,系统不再允许应用直接请求`SYSTEM_ALERT_WINDOW`权限,因为这种权限允许应用程序显示在其他应用之上,可能会干扰用户的正常操作并被视为潜在的风险。从Android 10(API级别29)开始,对于需要使用这个权限的应用,开发者需要遵循以下步骤:
1. **权限迁移**: 如果您的应用需要此权限,您应该将其添加到您的`AndroidManifest.xml`文件中的`uses-permission`标签,但在`<queries>`元素内声明意图检查条件(Intents),以便在运行时根据用户的行为动态请求权限。
```xml
<manifest>
<queries>
<!-- 检查设备是否支持悬浮窗 -->
<intent>
<action>android.media.BIND_REMOTE_AUDIO_PLAYBACK</action>
</intent>
</queries>
...
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
...
</manifest>
```
2. **用户授权**: 当第一次运行时,如果发现应用符合条件,系统会提示用户手动授予权限,而不是默认授予。用户可以选择始终允许、仅在特定条件下允许或者拒绝。
3. **处理无权限情况**: 应用需要检测是否有此权限,并在没有的情况下提供替代方案或者向用户解释为何需要该权限以及如何获得它。
4. **运行时请求**: 使用`ActivityManager.requestWindowFeature()`或`WindowManager.LayoutParams.FLAG_SYSTEM_ALERT_WINDOW`来临时申请权限,但这只适用于某些特殊情况,不是常规做法。
记住,尽量减少对`SYSTEM_ALERT_WINDOW`权限的依赖,因为它可能导致用户体验下降,尤其是在不需要的时候滥用此权限可能导致应用被用户卸载或者权限被撤销。
阅读全文