使用无障碍服务获取通知图标
Posted
技术标签:
【中文标题】使用无障碍服务获取通知图标【英文标题】:Get notification icon using an accessibility service 【发布时间】:2013-04-27 23:32:46 【问题描述】:有没有办法获取系统通知的图标? 我可以通过无障碍服务获得通知包裹。我什至可以从中获取图标的 id,但我被困在那里。我不知道如何使用 id 来获取实际的位图以便我可以显示它,因为它不是来自我的 apk。
到目前为止,这是我的代码:
@Override
public void onAccessibilityEvent(AccessibilityEvent event)
Log.d("onAccessibilityEvent");
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)
if (event.getParcelableData() instanceof Notification)
Notification notification = (Notification) event.getParcelableData();
Log.d("ticker: " + notification.tickerText);
Log.d("icon: " + notification.icon);
Log.d("largeIcon: " + notification.largeIcon);
Log.d("notification: " + event.getText());
尝试使用此 id 会导致
android.content.res.Resources$NotFoundException:资源 ID #0x7f0200ad
【问题讨论】:
【参考方案1】:所以我设法通过在 RemoteViews 中搜索第一个 ImageView 来完成此操作
extractImage(notification.contentView);
...
private void extractImage(RemoteViews views)
LinearLayout ll = new LinearLayout(getApplicationContext());
View view = views.apply(getApplicationContext(), ll);
drawable = searchForBitmap(view);
Log.d("Drawable: " + drawable);
private Drawable searchForBitmap(View view)
if (view instanceof ImageView)
return ((ImageView) view).getDrawable();
if (view instanceof ViewGroup)
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++)
Drawable result = searchForBitmap(viewGroup.getChildAt(i));
if (result != null)
return result;
return null;
【讨论】:
【参考方案2】:看看这是否有效:
String mPackageName = event.getPackageName();
Context remotePackageContext = context.createPackageContext(mPackageName, 0);
Drawable icon = remotePackageContext.getResources().getDrawable(mIcon);
【讨论】:
这正是我想要的!感谢您发布此内容以上是关于使用无障碍服务获取通知图标的主要内容,如果未能解决你的问题,请参考以下文章
Android Accessibility无障碍服务安全性浅析
Android Accessibility无障碍服务安全性浅析