Listen to incoming Whatsapp messages/notifications

喜夏-厌秋 提交于 2019-11-28 03:50:30

I was able to do this using Accessibility Service . Using this, you can listen to all notification on the notification bar. I listened to application-specification by adding the package name to the Accessibility Service service info , which in this case was com.whatsapp. I couldn't read the messages, but I get notified whenever a message arrives.

YES

You can actually parse incoming notifications and the messages within since Android 4.2. I've done this: https://github.com/Snirpo/whatsapprelay. This is done with an accessibilityservice. Currently it parses messages from a certain WhatsApp group. But it can be adapted to parse all messages. Sending messages trough WhatsApp is more difficult unfortunatly.

Unless Developers of that app intentionally share a service , a content provider, or intentionally send out public broadcasts of events, or expose a custom broadcast registering system, there is no legitimate way in android to listen to internal workings of a third party App. App isolation is designed in Android for a very important reason: security.

Accessibility events only catch incoming notifications event, not when they are updated. For now, WhatsApp notifications don't display the message, only the sender. The message is then added by the WhatsApp app with an update, which can't be caught by the accessibility service.

You will only have something like "1 new message from XXX", but that may be sufficient to your needs.

See below example to catch whatsapp notifications:

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();
        }

    }
}

And don't forget to set permission from settings>Accessibility in order to access the system events. Allow permission from settings .

check this link

accessibility service is not started

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!