是否可以在 Android Flutter 应用程序上启用“显示在其他应用程序上”?
是否可以桥接到原生 Android API 以在 Flutter 应用程序上启用此功能?有人可以详细说明一下吗?
是否可以在 Android Flutter 应用程序上启用“显示在其他应用程序上”?
是否可以桥接到原生 Android API 以在 Flutter 应用程序上启用此功能?有人可以详细说明一下吗?
您描述的功能由应用程序权限处理
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
文档指出此权限
允许应用使用类型 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 创建窗口,显示在所有其他应用之上。
是不是有点模糊的解释?让我们找出是什么TYPE_APPLICATION_OVERLAY意思。
应用程序覆盖窗口显示在所有活动窗口(FIRST_APPLICATION_WINDOW 和 LAST_APPLICATION_WINDOW 之间的类型)上方,但在状态栏或 IME 等关键系统窗口下方。
为什么我提到了这两行?
好吧,要回答您的问题,我们需要了解如何在普通的 android 中实现这一目标。我们确实知道它有效。问题是这种方法只适用于带有 UI 的 android 组件 - 活动、服务、对话框(后两者需要一些额外的工作)。
这对 Flutter 意味着什么?这意味着在 clean Flutter 中没有设置来启用这种行为,只有底层平台提供的工具。
在 android 上下文中,使用此权限将允许您将此功能用于 android UI 容器(需要通过这样的权限管理屏幕明确请求)
if(!Settings.canDrawOverlays(this)){
// ask for setting
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OVERLAY_PERMISSION) {
if (Settings.canDrawOverlays(this)) {
// permission granted...
}else{
// permission not granted...
}
}
}
而且我还不确定是否有 Flutter 模拟。
进一步探索发现,Flutter 在特殊的 android 容器FlutterActivity和FlutterFragment.
对于这两个,您可以在获得相关许可的情况下强制执行预期的行为。整个 Flutter UI 将有可能被绘制为覆盖。但是,如果您只想将 Flutter UI 的某些部分绘制为叠加层,例如某些 Flutter 对话框或导航路线的一部分 - 您将无法轻松实现它(仅创建一个单独的 Android 原生 UI 容器和通道你的颤振 UI - AFAIK 不推荐,因为有多个颤振 UI 容器可能会导致问题)
已经有一个插件可用,声称“在所有其他应用程序上显示 Truecaller 之类的覆盖窗口以及回调事件”,
请查看插件system_alert_window网址:https ://pub.flutter-io.cn/packages/system_alert_window
system_alert_window
一个颤振插件,用于在所有其他应用程序以及回调事件上显示 Truecaller 之类的覆盖窗口。Android Go 或 Android 11 及更高版本,此插件显示通知气泡,在其他 android 版本中,它显示一个覆盖窗口。