我编写了一个应用程序,该应用程序在 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/