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)
}
}