VIBRATE 权限为可选

VIBRATE permission as optional

我有一个应用程序(已经发布),我在其中开发了带有振动的新功能。所以我添加了新权限:

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

发布更新后我注意到我的 Nexus 7 2013 没有得到更新,可能是因为这个设备根本没有振动器...所以在下一个版本中我已经 改变了 上面的行到

<uses-feature
    android:name="android.permission.VIBRATE"
    android:required="false"/>

顺便说一下,这可能是不正确的...然后我的 Nexus 更新成功了。但现在我发现设备 4.0-4.3

偶尔会崩溃

Fatal Exception: java.lang.SecurityException Requires VIBRATE permission

据我所知,行 android:required 仅适用于 uses-feature 而不适用于 uses-permission,所以问题是:如何为 [ 声明适当的权限=16=] 允许安装在没有振动的设备上并避免 SecurityException 在旧的、不幸的是仍然受支持的设备上?

PS。目前我认为 proper perm declaration 应该如下所示,但我不想 "test" 在生产环境中声明。有人可以确认吗?

<uses-permission 
    android:name="android.permission.VIBRATE"
    android:maxSdkVersion="18" />

基于更新设备上的崩溃和仍在工​​作的振动,即使可能不适合 VIBRATOR uses-feature 声明(因此目前实际上没有许可)。也许自从 KitKat 以来,就没有必要像 writing on SD? I can't find anything about that in docs... Also: above declaration is present in Wikipedia official app

那样声明振动烫发了

编辑 - 更复杂的信息:引入了 Rel 编号 100 uses-permission,Nexus 7 没有得到更新。一周后 101 发布,清单没有任何变化(除了版本号 ofc)和与此新功能相关的代码(另一个组件中的错误修复),Nexus 仍然没有更新。下周和 rel 102,没有变化。然后我在 103 中更改为 uses-feature 并且 Nexus 在同一天获得更新......并且因为这个版本崩溃开始发生在 4.0-4.3

4 年后没有人证实,所以我会:有问题的片段是正确的声明

<uses-permission 
    android:name="android.permission.VIBRATE"
    android:maxSdkVersion="18" />