AndroidTV获取通知图标

问题描述

我正在尝试在AndroidTV上获取活动通知的图标。我需要将其编码为base64并发送给它以响应本机。

该图标存储为Blob类型,并且已解码,如下所示:

android.graphics.drawable.Icon  com.android.systemui/

看起来只是图标的路径,但我需要获取真实的图标并将其编码为base 64。

我正在这样检索数据:

private static final Uri NOTIF_CONTENT_URI = Uri.parse(
            "content://com.android.tv.notifications.NotificationContentProvider/" +
                    "notifications");

final String[] projection = { TITLE,TEXT,SMALL_ICON};

Cursor c = _reactContext.getContentResolver().query(NOTIF_CONTENT_URI,projection,null,null);

if (c != null && c.moveToFirst()) {
     do {
         String title = c.getString(c.getColumnIndex(TITLE));
         String text = c.getString(c.getColumnIndex(TEXT));
         byte[] smallIconBytes = c.getBlob(c.getColumnIndex(SMALL_ICON));
     } while (c.moveToNext());
}

获取标题和文本效果很好,但是将图标字节编码为base64返回

HgAAAGEAbgBkAHIAbwBpAGQALgBnAHIAYQBwAGgAaQBjAHMALgBkAHIAYQB3AGEAYgBsAGUALgBJAGMAbwBuAAAAAAACAAAAFAAAAGMAbwBtAC4AYQBuAGQAcgBvAGkAZAAuAHMAeQBzAHQAZQBtAHUAaQAAAAAALwUIAQAAAAAFAAAA

可以解码为

android.graphics.drawable.Icon  com.android.systemui/

如何获取该图标,而不仅仅是路径?谢谢。

解决方法

private static Icon getIconFromBytes(byte[] blob) {
        Parcel in = Parcel.obtain();
        Icon icon = null;
        if (blob != null) {
            in.unmarshall(blob,blob.length);
            in.setDataPosition(0);
            icon = in.readParcelable(Icon.class.getClassLoader());
        }

        in.recycle();
        return icon;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...