服务可以在 Android M 中请求权限吗?

Can a service request for permission in Android M?

我认为在 M 中 requestPermissions() 只能由 Activity class 调用。我有一个没有 UI 屏幕的应用程序。它作为后台服务运行。这是否意味着如果 checkSelfPermissions returns 被拒绝,我必须放置一个微调屏幕?

I have an app that has no UI screen.

那么它永远不会 运行,除非它预装在 Android 设备或​​自定义 ROM 上,或者它是其他应用程序的插件。否则,您的应用程序将永远处于停止状态。几乎所有通过正常渠道(包括 Play 商店)分发的应用程序都需要 activity.

Does this mean that I have to put a spinner screen if checkSelfPermissions returns denied?

我不知道 "a spinner screen" 是什么。 AFAIK,对于需要 运行time 权限但它没有的服务的推荐模式是:

  1. 提出一个 Notification,让用户知道如果没有此权限,该服务将无法运行。

  2. Notification 触发可以调用 requestPermissions()Activity。可选地,这个 activity 可以有 Theme.Translucent.NoTitleBar,所以唯一可见的 UI 是权限对话框。

  3. 如果 onRequestPermissionResult() 表示您有权限,activity 可以告诉服务继续(例如,通过调用 startService()),然后 finish() 本身。如果 onRequestPermissionResult() 表示用户拒绝了权限,则执行任何有意义的操作(例如,再次显示 Notification,正常关闭,建议用户卸载应用程序)。