- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简介
我正在运行 flutter v1.17.5 DeviceApps v1.0.10 和 SystemAlertWindow v0.2.2+3(本质上不是最新版本)。而且我想从在前台运行的系统警报窗口打开我的应用程序,即使应用程序已关闭。
我正在使用 SystemOverlayWindow 插件和插件是一个 Activity SystemAlertWindowPlugin.java
在我的申请.kt 我注册插件并通过注册表
public class Application: FlutterApplication(), PluginRegistrantCallback {
override fun onCreate() {
super.onCreate();
FlutterFirebaseMessagingService.setPluginRegistrant(this);
SystemAlertWindowPlugin.setPluginRegistrant(this);
createNotificationChannels();
FlutterMain.startInitialization(this);
}
override fun registerWith(registry: PluginRegistry?) {
if (!registry!!.hasPlugin("io.flutter.plugins.firebasemessaging")) {
FirebaseMessagingPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
}
if (!registry!!.hasPlugin("in.jvapps.system_alert_window")) {
SystemAlertWindowPlugin.registerWith(registry!!.registrarFor("in.jvapps.system_alert_window"));
}
if (!registry!!.hasPlugin("fr.g123k.deviceapps")) {
DeviceAppsPlugin.registerWith(registry!!.registrarFor("fr.g123k.deviceapps"));
}
}
我还注册了另一个名为
的插件。设备应用 .这是 DeviceAppsPlugin
DeviceAppsPlugin.java
static Future<void> systemOverlayOnClickListner(String tag) async {
switch (tag) {
case 'button_app_to_foreground':
DeviceApps.openApp('com.companyname.appname'); // this is where I try to run the plugin
await SystemAlertWindow.closeSystemWindow();
break;
}
回调将调用 DeviceApps 插件的方法。这会导致问题,因为
this方法将尝试从其构造函数中传递的 Activity 中获取包管理器。但根据这个错误, Activity 为空。
E/MethodChannel#g123k/device_apps(24210): Failed to handle method call
E/MethodChannel#g123k/device_apps(24210): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.app.Activity.getPackageManager()' on a null object reference
E/MethodChannel#g123k/device_apps(24210): at fr.g123k.deviceapps.DeviceAppsPlugin.openApp(DeviceAppsPlugin.java:141)
所以它会在一个空对象上调用 getPackageManager()。
E/flutter (26735): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'android.content.pm.PackageManager android.app.Activity.getPackageManager()' on a null object reference, null)
E/flutter (26735): #0 StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:569
E/flutter (26735): #1 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:156
E/flutter (26735): <asynchronous suspension>
E/flutter (26735): #2 MethodChannel.invokeMethod
package:flutter/…/services/platform_channel.dart:329
E/flutter (26735): #3 DeviceApps.openApp
package:device_apps/device_apps.dart:81
E/flutter (26735): #4 SystemOverlayController.systemOverlayOnClickListner
package:appname/…/singletons/system_overlay_controller.dart:51
E/flutter (26735): #5 callbackDispatcher.<anonymous closure>
package:system_alert_window/system_alert_window.dart:136
E/flutter (26735): #6 MethodChannel._handleAsMethodCall
package:flutter/…/services/platform_channel.dart:409
E/flutter (26735): #7 MethodChannel.setMethodCallHandler.<anonymous closure>
package:flutter/…/services/platform_channel.dart:377
E/flutter (26735): #8 _DefaultBinaryMessenger.handlePlatformMessage
package:flutter/…/services/binding.dart:199
E/flutter (26735): #9 _invoke3.<anonymous closure> (dart:ui/hooks.dart:290:15)
E/flutter (26735): #10 _rootRun (dart:async/zone.dart:1184:13)
E/flutter (26735): #11 _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter (26735): #12 _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter (26735): #13 _invoke3 (dart:ui/hooks.dart:289:10)
E/flutter (26735): #14 _dispatchPlatformMessage (dart:ui/hooks.dart:164:5
示例 repo
最佳答案
我在 https://github.com/fmatosqg/system_alert_window/tree/hack_fix 获得了修复崩溃症状的 hack。
简而言之,插件在不再可用时访问 Activity 。我的快速修复存储了 activity.applicationContext
(保证在应用程序处于 Activity 状态时存在 - 即使它只是一个覆盖)并将其存储在一个静态变量中,该变量可能比类 SystemAlertWindowPlugin
中的对象生命周期更长.
. . .
private static Context staticContext;
. . .
private boolean openApp(String packageName) {
Intent launchIntent = staticContext.getPackageManager().getLaunchIntentForPackage(packageName);
if (launchIntent != null) {
// null pointer check in case package name was not found
staticContext.startActivity(launchIntent);
return true;
}
return false;
}
我想解释一下为什么这不是一个正确的解决方法,但我现在时间不多,稍后会尝试解释原因。但我不是 flutter 插件方面的专家,如果不花更多时间了解插件本身,我将无法确定正确的代码如何,而我可能无法做到这一点。
关于java.lang.NullPointerException : Attempt to invoke virtual method 'android. content.pm.PackageManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62840471/
进程虚拟机和系统虚拟机有什么区别? 我的猜测是,进程 VM 没有为该操作系统的整个应用程序提供一种操作系统,而是为某些特定应用程序提供环境。 系统虚拟机为操作系统提供了一个安装环境,就像 Virtua
我在成员函数的上下文中理解 virtual,例如 virtual void frob()。但它在类声明的上下文中意味着什么,例如 class Foo : public virtual Bar? 对于给
根据 react-virtualized 文档,“AutoSizer 组件装饰 React 元素并自动管理宽度和高度属性,以便装饰元素填充可用空间”。 建议通常是加上height: 100%;或 fl
根据 this类似 StackOverflow 问题和其他文章,默认情况下 C# 方法是“非虚拟的”,我认为这意味着您不能在派生类中覆盖它们。 如果那是真的,能否请您向我解释一下,在下面的示例中,我如
我有一个基类Media和几个派生类,即DVD、Book等...基类写成: class Media{ private: int id; string title;
我搜索了一些关于虚函数声明的帖子,相信 =0 在 virtual void test()=0; 是固定句法所以 virtual void test()=NULL; virtual void test(
我正在使用 RV 列表加载具有自定义格式的大型文档。它非常有效,但我遇到了以下两个问题: 我目前在 cellmeasurer 中设置了一个列表 based on this计算行的动态高度(宽度是固定的
我一直在努力制作 this react virtualized table example工作 & 开始严重怀疑我的理智。我创建了一个 react 应用程序,我只是想在 App.js 中使用以下内容呈
我在Windows 7 Pro计算机上安装了Windows Virtual PC和Windows XP Mode。运行XP模式会在Virtual PC上自动安装XP。我想创建第二台与第一台相同的虚拟P
我使用 Virtual PC 来创建新的环境来测试我的安装程序。但我一定是做错了什么,因为内部装有 Vista 或 XP 的 VPC 镜像占用了大约 15GB 的磁盘空间(包括安装在其中的 VS200
是否可以为 Ubuntu 虚拟机动态分配处理器和内存?例如。进程在主机系统上运行,导致处理器的使用率从 30%-70% 上下波动,这些进程还占用 8GB 内存中 3GB-7GB 之间的波动量,即 1G
我正在使用“react-virtualized”来创建一个表。在该表中,一些数据可能显示为 'Brian Vaughn1'。 .此表格单元格应具有 font-weight: bold并且只应呈现文本,
我正在使用“react-virtualized”来创建一个表。在该表中,一些数据可能显示为 'Brian Vaughn1'。 .此表格单元格应具有 font-weight: bold并且只应呈现文本,
我一直在努力理解一段这样的代码: class A { // some class definition } class B { public: virtual A *s
基于 http://en.wikipedia.org/wiki/Virtual_inheritance class Animal { ... }; // Two classes virtually i
我看到 C++ 中的某些函数被声明为 virtual const int getNumber(); 但是如果函数声明如下有什么区别呢? const virtual int getNumber(); 这
问题来自C++ faq。 http://www.parashift.com/c++-faq-lite/protected-virtuals.html 使用公共(public)重载虚拟的代码: clas
这个问题在这里已经有了答案: How is "=default" different from "{}" for default constructor and destructor? (3 个答案
virtual final 函数(final 在基类)是否有任何 vtable/virtual 成本? class B{ public: virtual void fFinal() final
我有一个只包含 exe 文件(没有源代码)的 hello 工具。 你好工具结构: bin helloBin.exe helloRoot.exe conanfile.py conanfile.py
我是一名优秀的程序员,十分优秀!