我工作的通知基于应用程序,为此,我需要听来电通知。 我已经能够听来电,短信,邮件等。我不知道如何监听来自通过代码在WhatsApp的朋友坪或消息。 可这实际上做什么? 如果是这样,怎么样? 可以无障碍服务可以用于此,使用程序包名称为“com.whatsapp”?
Answer 1:
我能做到这一点使用辅助服务 。 利用这一点,你可以听的通知栏上的所有通知。 我加入了包名的辅助服务,听取了应用规范service info
,在这种情况下是com.whatsapp
。 我无法读取的消息,但每当有消息到达我得到通知。
Answer 2:
是
实际上,你可以由于Android 4.2中解析收到的通知和消息。 我已经做到了这一点: https://github.com/Snirpo/whatsapprelay 。 这与accessibilityservice完成。 目前,它解析从某一个WhatsApp的组消息。 但它可以被用于解析所有消息。 发送消息槽的WhatsApp是比较困难的不幸。
Answer 3:
除非该应用程序的开发人员故意共享服务,内容提供商,或者故意发送事件的公共广播或公开自定义广播注册系统中,采用的是Android没有合法的方式去倾听第三方应用程序的内部工作。 应用程序隔离设计的Android的一个非常重要的原因: 安全 。
Answer 4:
可访问性事件只能望尘莫及收到的通知事件,而不是当它们被更新。 现在,WhatsApp的通知不显示信息,只有发件人。 该消息随后由一个更新,这不能由辅助服务被捕获的WhatsApp的应用添加。
您只需像“从XXX 1个新信息”,但可能是足够您的需求。
Answer 5:
见下面的例子赶上WhatsApp的通知:
public class Notifier extends AccessibilityService {
@Override
public void onCreate(){
//Toast.makeText(this,"Oncreate", Toast.LENGTH_LONG).show();
}
@Override
protected void onServiceConnected() {
// Set the type of events that this service wants to listen to. Others
// won't be passed to this service.
Toast.makeText(this,"Service connected", Toast.LENGTH_LONG).show();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;;
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED ;
// If you only want this service to work with specific applications, set their
// package names here. Otherwise, when the service is activated, it will listen
// to events from all applications.
info.packageNames = new String[] {"com.whatsapp"};
info.notificationTimeout = 100;
setServiceInfo(info);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if(event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
Toast.makeText(this,"Notification Catched", Toast.LENGTH_LONG).show();
}
}
}
而且不要忘记设置从设置>辅助功能权限才能访问系统事件。 允许从设置权限。
检查此链接
无障碍服务未启动
文章来源: Listen to incoming Whatsapp messages/notifications