permissions - Android Wear 上请求权限

标签 permissions wear-os system-alert-window

我编写了一个应用程序,该应用程序在 Android Wear 上利用 system_alert_window。由于棉花糖,此权限默认被撤销。我已从手机设置中在手机端应用程序上启用了此权限。但在 Android Wear 端应用程序上该权限仍然被拒绝,并导致 Android Wear 端应用程序因权限被拒绝异常而崩溃。有没有办法在Android Wear端启用此权限?

最佳答案

简短回答:将您的 watch 应用保持在 targetSdkVersion 22 上。

长答案:此权限不使用通常的 requestPermissions() 流程。 docs中有更多信息,但它归结为用户启用此权限的特殊设置 UI - 而且 Google 似乎并未在 Wear 上实现该 UI。如果没有它,任何(非系统)应用程序都无法被授予此权限,并且任何尝试使用它的应用程序都会因以下错误而崩溃:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@a597673 -- permission denied for this window type

但是,此限制仅适用于面向 SDK 级别 23(及更高级别)的应用。因此,暂时将您的应用保持在 22 上,希望 Google 能够在您需要增加它之前填补这一空白。

2016 年 12 月 22 日更新: 此问题已在 Android Wear 2.0 上修复。对于 Wear 1.x,仍然没有比上述更好的解决方案,但 Google 已经为 Wear 2 实现了权限 UI,当它发布时, watch 应用程序应该能够使用标准意图链接到它:

startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
        Uri.parse("package:" + getPackageName())));

关于permissions - Android Wear 上请求权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34524966/

相关文章:

qt - 如何获取在特定目录中创建新文件或修改某个文件的授权信息?

android - 未经许可读取联系人?

sql - 如何查看 SQL 数据库的所有授权?

android - 如何在 Android Wear 中检测省电模式?

android - 如何获取 dataclient.getDataItem(Uri) 自己的 node_id?

android - 判断Android Wear设备是否在线

android 4.1 - 4.4 system_alert_window 权限

android - 避免为使用 SYSTEM_ALERT_WINDOW 的服务检测到屏幕覆盖

android - 如何使覆盖窗口可触摸

android - Android 是如何执行权限的?