Java 从android服务调用Dart函数

Java 从android服务调用Dart函数,java,android,flutter,dart,Java,Android,Flutter,Dart,我对颤振插件开发和方法通道仍然是新手。 我的颤振代码中有这个函数,它显示一个弹出窗口 void _showOverlayWindow() { if (!_isShowingWindow) { SystemWindowHeader header = SystemWindowHeader(...); SystemWindowBody body = SystemWindowBody(...); SystemWindowFooter footer = Syst

我对颤振插件开发和方法通道仍然是新手。
我的颤振代码中有这个函数,它显示一个弹出窗口

void _showOverlayWindow() {
    if (!_isShowingWindow) {
      SystemWindowHeader header = SystemWindowHeader(...);
      SystemWindowBody body = SystemWindowBody(...);
      SystemWindowFooter footer = SystemWindowFooter(...);
      SystemAlertWindow.showSystemWindow(...);
    }
  }
在我的java代码中,我有一个brodcast接收器,它会在某个事件中触发

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      Log.d("MYTAG","Sent from brodcast receiver");

    }
}
接收器自己工作,现在我想知道是否有可能运行显示java端弹出窗口的颤振函数。目前,我可以通过接收器运行应用程序,如下所示

public void onReceive(Context context, Intent intent) {
      Log.d("MYTAG","Sent from brodcast receiver");

      Intent i = new Intent();
      i.setClassName("com.example.myApp","com.example.myApp.MainActivity");
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      ctx.startActivity(i);
}

但我想知道是否可以只运行该功能,只显示弹出窗口而不显示应用程序屏幕视图,如果可以,是否意味着我仍然必须加载整个应用程序?因为函数依赖于类中的其他状态。

谢谢。

当将背景颜色设置为透明时,由于Android应用程序主题的默认设置,您可以看到视图仍然有黑色背景。您需要修改配置以实现完全透明,即:

<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>
您可以查看一个简单的示例,屏幕上仅显示一个
对话框

您可以查看这些实现后台运行的项目:

  • 安卓报警管理器:
  • 背景位置:

也是关于颤振后台服务的一个很好的指南

这非常有帮助,帮助我解决了问题。

谢谢,这部分解决了问题,如果我只想要弹出窗口,但我想在事件发生时显示弹出窗口,这很有效,但我还想在应用程序中具有其他功能。换句话说,当我手动打开应用程序时,我希望正常显示应用程序,但当事件发生在应用程序关闭时,我希望显示弹出窗口only@SamerAlkhatib可以在后台运行Dart代码并收听事件。您可以浏览我在答案中包含的开源软件包的配置,以了解更多信息:最后一个问题,我关心的是如何显示一些ui,比如后台弹出的界面,因为我只看到人们在后台运行dart代码,这会执行一些非ui功能。@SamerAlkhatib我认为最好的方法是探索本地通知,而不是对话框显示。这样,当通知交互时,LocalNotifications将能够启动您的UI。@SamerAlkhatib顺便说一句,您可以选择一个答案标记为接受答案吗。谢谢你,伙计!
import android.os.Bundle
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.android.FlutterActivityLaunchConfigs.BackgroundMode.transparent
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        intent.putExtra("background_mode", transparent.toString())
        super.onCreate(savedInstanceState)
    }
}