java - 在 Android 上使用 Flutter 显示在其他应用程序之上

标签 java android android-studio flutter

是否可以在 Android Flutter 应用程序上启用“显示在其他应用程序上”?
是否可以桥接到原生 Android API 以在 Flutter 应用程序上启用此功能?有人可以详细说明一下吗?

最佳答案

您描述的功能由应用程序权限处理<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> Documentation声明此许可

Allows an app to create windows using the type WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, shown on top of all other apps.


是不是有点模糊的解释?让我们看看 TYPE_APPLICATION_OVERLAY 是什么意思方法。

Application overlay windows are displayed above all activity windows (types between FIRST_APPLICATION_WINDOW and LAST_APPLICATION_WINDOW) but below critical system windows like the status bar or IME.


为什么我提到了这两行?
好吧,要回答您的问题,我们需要了解如何在普通的 android 中实现这一目标。我们确实知道它有效。问题是这种方法只适用于带有 UI 的 android 组件 - Activity 、服务、对话框(后两者需要一些额外的工作)。
这对 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 容器中呈现自己 FlutterActivityFlutterFragment .
对于这两个,您可以在获得相关许可的情况下强制执行预期的行为。整个 Flutter UI 将有可能被绘制为覆盖。
但是,如果您只想将 Flutter UI 的某些部分绘制为叠加层,例如某些 Flutter 对话框或导航路线的一部分 - 您将无法轻松实现它(仅创建一个单独的 Android 原生 UI 容器和 channel 你的 flutter UI - AFAIK 不推荐,因为有多个 flutter UI 容器可能会导致问题)

关于java - 在 Android 上使用 Flutter 显示在其他应用程序之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64210724/

相关文章:

java - Spring - 此 URL 不支持 405 Http 方法 DELETE

java - session 超时无法正常工作

java - 我们可以在 Windows 上安装两个版本的 Java JDK 吗?

android - 如何在左右侧 View 上创建阴影?

java - 我无法在主类中使用类

java - Android:点击按钮时的新 View

java - 在 Spring MVC 中创建的模型对象到底在哪里?

android - Xamarin.android 中的 Xamarin- Rtl 支持

java - 使用回调后执行到 UI 主线程的方法创建 Runnable 类

java - 如何使用StringUtils和myString,获取无法解决错误