如何将 Bitmap 转换为 AndroidBitmap 以在 Flutter 中推送通知?

Posted

技术标签:

【中文标题】如何将 Bitmap 转换为 AndroidBitmap 以在 Flutter 中推送通知?【英文标题】:How to convert Bitmap to AndroidBitmap for push notifications in Flutter? 【发布时间】:2021-12-22 23:43:07 【问题描述】:

我正在尝试使用flutter_local_notifications 插件为推送通知设置一个大图标,并为我想使用网络图像的图标设置一个大图标。代码如下:

Bitmap bitmap = await Bitmap.fromProvider(NetworkImage("http://pudim.com.br/pudim.jpg")); 
var androidSpecifics = new AndroidNotificationDetails(
    notificationData['id'].toString(),
    'Crop2x Notifications',
    'Crop2x Channel Description',
    importance: Importance.max,
    priority: Priority.high,
    largeIcon: bitmap,
    ticker: 'ticker');

此代码给出错误,因为 bitmap 属于 Bitmap 类型,而不是 AndroidBitmap 类型,而命名参数 largeIcon 需要这种类型。

【问题讨论】:

能分享一下Bitmap和AndroidBitmap类的包吗? @DeePanShu Bitmap 来自 'Bitmap' 包,但不了解 AndroidBitmap。 【参考方案1】:

探索AndroidBitmap类。

尝试使用HTTP 连接获取Uint8List 格式的图像:

Future<Uint8List> getImageBytes(String imageUrl) async
     
     http.Response response = await http.get(
     Uri.parse('https://flutter.io/images/flutter-mark-square-100.png'));
     return response.bodyBytes; //Uint8List

然后在获得 bodyBytes 作为未来之后尝试使用AndroidBitmap 类和base64.encode() 将其转换为位图:

getImageBytes("http://pudim.com.br/pudim.jpg").then((bodyBytes)

      AndroidBitmap androidBitmap = ByteArrayAndroidBitmap.fromBase64String(base64.encode(bodyBytes));

      var androidSpecifics = new AndroidNotificationDetails(
      notificationData['id'].toString(),
      'Crop2x Notifications',
      'Crop2x Channel Description',
      importance: Importance.max,
      priority: Priority.high,
      largeIcon: androidBitmap,
      ticker: 'ticker');
;

【讨论】:

以上是关于如何将 Bitmap 转换为 AndroidBitmap 以在 Flutter 中推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SkiaSharp.SkBitmap 转换为 Android.Graphics.Bitmap?

如何将 Bitmap 转换为 AndroidBitmap 以在 Flutter 中推送通知?

如何通过 Bitmap::GetHBITMAP 将位图转换为带有 alpha 的 HBITMAP?

VB.net 如何将数据转换为位图(Bitmap)所需要的byte()数组?急!!!!

如何在 android 中将 Bitmap 转换为 Drawable?

加载 Jpg/Gif/Bitmap 并转换为 Bitmap