如何使用 Flutter 小部件显示自定义 Android 通知?
How do I show a custom Android notification using Flutter widgets?
我想使用 Flutter 小部件在 Android 上显示自定义通知?我想知道这是否可能。
我做了什么:
我尝试使用显示 Flutter widget in an Android Fragment and display that Fragment using RemoteViews for custom Android notifications。
显示了一条通知,但不包括 Flutter 小部件。请参阅下面的屏幕截图:
代码:
var newFlutterFragment: FlutterFragment = FlutterFragment.withCachedEngine("my_engine_id")
.shouldAttachEngineToActivity(false)
.build()
if (fragmentManager != null) {
fragmentManager
.beginTransaction()
.add(
R.id.fragment_container,
newFlutterFragment,
TAG_FLUTTER_FRAGMENT
)
.commit()
}
val notificationLayout = RemoteViews(packageName, R.layout.activity_layout)
val notificationLayoutExpanded = RemoteViews(packageName, R.layout.activity_layout)
var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_bg_service_small)
.setCustomContentView(notificationLayout)
.setCustomBigContentView(notificationLayoutExpanded)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
var notificationId = 1;
with(NotificationManagerCompat.from(this)) {
// notificationId is a unique int for each notification that you must define
notify(notificationId, builder.build())
}
为了使 flutter 小部件正常工作,应该有一个 flutter 虚拟机在工作。在远程视图中没有这种可能性,因为它是 Android 系统的 运行 并且它不知道颤振。此外,甚至 not all android 本机小部件也可以呈现为远程视图。
不过,您可以在此处执行一些选项:
- 如果您的 flutter 虚拟机处于活动状态,您可以栅格化 flutter 小部件并将其显示在远程视图内的 ImageView 中。虽然它不会是交互式的。您可以将它与一些 android 本机按钮结合使用。
- 将服务与 ui 一起使用 - 理论上它可以呈现 flutter 视图,但很难实现,因为几乎不可能显示 activity.
之外的片段
- 使 flutter 中所需的所有逻辑都通过平台通道将数据传入和传出本机实现。平台通道仅在应用程序主线程工作时才工作。
- 将所有内容实现为 android navite,不要为 flutter 而烦恼,因为 flutter 是为跨平台而设计的,之前的所有内容都无法在 iOs 上运行,因此 flutter 的重点是在这种情况下不存在。
我想使用 Flutter 小部件在 Android 上显示自定义通知?我想知道这是否可能。
我做了什么:
我尝试使用显示 Flutter widget in an Android Fragment and display that Fragment using RemoteViews for custom Android notifications。
显示了一条通知,但不包括 Flutter 小部件。请参阅下面的屏幕截图:
代码:
var newFlutterFragment: FlutterFragment = FlutterFragment.withCachedEngine("my_engine_id")
.shouldAttachEngineToActivity(false)
.build()
if (fragmentManager != null) {
fragmentManager
.beginTransaction()
.add(
R.id.fragment_container,
newFlutterFragment,
TAG_FLUTTER_FRAGMENT
)
.commit()
}
val notificationLayout = RemoteViews(packageName, R.layout.activity_layout)
val notificationLayoutExpanded = RemoteViews(packageName, R.layout.activity_layout)
var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_bg_service_small)
.setCustomContentView(notificationLayout)
.setCustomBigContentView(notificationLayoutExpanded)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
var notificationId = 1;
with(NotificationManagerCompat.from(this)) {
// notificationId is a unique int for each notification that you must define
notify(notificationId, builder.build())
}
为了使 flutter 小部件正常工作,应该有一个 flutter 虚拟机在工作。在远程视图中没有这种可能性,因为它是 Android 系统的 运行 并且它不知道颤振。此外,甚至 not all android 本机小部件也可以呈现为远程视图。
不过,您可以在此处执行一些选项:
- 如果您的 flutter 虚拟机处于活动状态,您可以栅格化 flutter 小部件并将其显示在远程视图内的 ImageView 中。虽然它不会是交互式的。您可以将它与一些 android 本机按钮结合使用。
- 将服务与 ui 一起使用 - 理论上它可以呈现 flutter 视图,但很难实现,因为几乎不可能显示 activity. 之外的片段
- 使 flutter 中所需的所有逻辑都通过平台通道将数据传入和传出本机实现。平台通道仅在应用程序主线程工作时才工作。
- 将所有内容实现为 android navite,不要为 flutter 而烦恼,因为 flutter 是为跨平台而设计的,之前的所有内容都无法在 iOs 上运行,因此 flutter 的重点是在这种情况下不存在。