在即时应用程序上覆盖权限

Overlay permission on instant app

我正在尝试使用从即时应用程序触发的 "Floating Widget",为此我需要获得 ACTION_MANAGE_OVERLAY_PERMISSION,我应该能够通过这种方式获得:

intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
               Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, APP_PERMISSION_REQUEST);

不幸的是,当我尝试启动此 Intent 时遇到此运行时错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.instantapps.samples.hellofeature/com.instantappsamples.feature.hello.HelloActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.action.MANAGE_OVERLAY_PERMISSION dat=package:com.google.android.instantapps.samples.hellofeature }

莫非免安装应用无法获得此权限? (安装的应用程序运行正常)

免安装应用程序的 PackageManager 视图有限。我没有方便的参考资料可以肯定地说设置 - 或者特别是这个 activity - 是不可见的。但期望应该是大多数包中的大多数活动是不可见的。

即使您能够访问这个 activity(或者,如果您只是以用户身份访问,通过在“设置”应用中导航到它),您的免安装应用也不会允许获得此权限。既出于技术原因(因为 PackageManager 通常不知道即时应用程序,至少在 O 之前的版本中),也出于政策原因。具体来说,覆盖将意味着某种程度的后台操作,这是 FAQ 所不允许的。 (另请注意,覆盖未列在该页面的允许权限列表中。)