我正在编写一个辅助功能应用程序,它可以帮助用户使用语音控件和通过外部辅助工具提供的控件来浏览Android.它使用MonkeyTalk Java API来完成更重的工作.
为了帮助用户了解正在发生的事情,我们还使用了辅助功能服务,该服务会读取通知,以便用户可以更快地采取措施.
我被告知,当消息到达facebook messenger时,他们没有得到音频提示,并且检查日志我看到的是:
D/NotificationService(2665): package com.facebook.orcaText: []
Run Code Online (Sandbox Code Playgroud)
并event.getText().size()返回0(在AccessibilityEvent事件上).
现在他们必须打开应用程序并将文本读取给他们,这是2个语音命令更多...
我正确地得到所有其他通知.我试着从facebook上寻找关于他们对可访问性的立场的文档,但我一无所获.
有没有办法从他们的通知中获取文本?
我需要从RemoteViews对象中检索一些文本.它可以让我得到LayoutId,但我不知道如何从一个文本TextView是在此RemoteView(即通知).
也是RemoteView唯一包含setter,但没有getter,所以我想我必须使用LayoutId(不知何故).
你能帮帮我吗?谢谢!
/编辑:我之所以这样问,是因为我有一个AccessibilityService检索通知的原因.因此,这是检索值的唯一方法.
/ edit2:我使用此代码接收通知:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
List<CharSequence> notificationList = event.getText();
for (int i = 0; i < notificationList.size(); i++) {
Toast.makeText(this.getApplicationContext(), notificationList.get(i), 1).show();
}
if (!(parcel instanceof Notification)) {
return;
}
final Notification notification = (Notification) parcel;
doMoreStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
使用该notification对象,我可以访问a RemoteViews(notification.contentView)和a PendingIntent(notification.contentIntent).要获得layoutId,我可以打电话contentView.getLayoutId()
我已实施通知监听器以查找Gmail通知.
我想从通知中收集扩展文本(bigtext),如下面的通知所示:

请参阅"----转发消息---"等,仅在用户展开通知以显示操作按钮时出现.
此字符串值不会出现在通知的"EXTRAS"数据中...
http://developer.android.com/reference/android/app/Notification.html