英文:
AndroidTV get notification icon
问题
我正在尝试获取 Android TV 上活动通知的图标。我需要将其编码为 base64 格式并发送到 React Native。
该图标存储为 blob 类型,解码后如下所示:
android.graphics.drawable.Icon com.android.systemui/
这似乎只是一个指向图标的路径,但我需要获取真正的图标并将其编码为 base64。
我以以下方式检索数据:
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, 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/
我该如何获取图标而不仅仅是路径?谢谢。
英文:
Im trying to get the icon of active notification on AndroidTV. I need to encode it to base64 and send it to react native.
The icon is stored as blob type and decoded looks like this
android.graphics.drawable.Icon com.android.systemui/
which looks like just a path to the icon, but i would need to get the real icon and encode it to base 64.
Im retrieving data like this:
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, 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());
}
Getting title and text works fine, but encoding the icon bytes to base64 returns
HgAAAGEAbgBkAHIAbwBpAGQALgBnAHIAYQBwAGgAaQBjAHMALgBkAHIAYQB3AGEAYgBsAGUALgBJAGMAbwBuAAAAAAACAAAAFAAAAGMAbwBtAC4AYQBuAGQAcgBvAGkAZAAuAHMAeQBzAHQAZQBtAHUAaQAAAAAALwUIAQAAAAAFAAAA
which can be decoded to
android.graphics.drawable.Icon com.android.systemui/
How can I get that icon and not just the path? Thank you.
答案1
得分: 0
以下是您要的翻译内容:
private static Icon getIconFromBytes(byte[] blob) {
Parcel in = Parcel.obtain();
Icon icon = null;
if (blob != null) {
in.unmarshall(blob, 0, blob.length);
in.setDataPosition(0);
icon = in.readParcelable(Icon.class.getClassLoader());
}
in.recycle();
return icon;
}
英文:
private static Icon getIconFromBytes(byte[] blob) {
Parcel in = Parcel.obtain();
Icon icon = null;
if (blob != null) {
in.unmarshall(blob, 0, blob.length);
in.setDataPosition(0);
icon = in.readParcelable(Icon.class.getClassLoader());
}
in.recycle();
return icon;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论