WhatsApp Notification bzw. neue Nachricht abfragen

C

ChrisMobile

Stammgast
83
Hallo zusammen,

ich möchte eine App basteln, die neue WhatsApp Nachrichten direkt auf dem Lockscreen (Sense4) ausgibt.
Mit SMS ist das ja nicht so schwierig aber ich finde keine Möglichkeit auf neue Whatsapp Nachrichten zu reagieren.

Im Logcat wird mir nichts brauchbares angezeigt, wenn eine neue Nachricht eingeht.
Ich habe sonst noch überlegt die Notifications auszulesen aber dazu auch keine Möglichkeit im Android SDK gefunen.

Viele Grüße
Chris
 
Zuletzt bearbeitet:
Evtl mal die Entwickler von Missed It! fragen?

Gruß mkl

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Auch wenn es vielleicht etwas spät kommt:

Mit einem AccessibilityService ist es eigentlich nicht allzu schwierig Nachrichten abzufangen. Muss nur eben explizit vom Benutzer in den Android Einstellungen aktiviert werden.

Ohne Garantie das es funktioniert:

AccessibilityService:
Code:
public class MyAccessibilityService extends AccessibilityService {
	
	@Override
    public void onCreate() {
        super.onCreate();
    }
	
	private void sendToMain(String message) {
		
		Intent intent=new Intent("whatsapp.notifier.receiver");
		intent.putExtra("message",message);
		sendBroadcast(intent);

	}

	@Override
	public void onAccessibilityEvent(AccessibilityEvent event) {
		
		final int eventType = event.getEventType();
		
	    String eventText = "";
	    switch(eventType) {

	    	case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
		    		StringBuilder sb = new StringBuilder();
		            for (CharSequence s : event.getText()) {
		                sb.append(s);
		            }
		            eventText = sb.toString();

		            String notificationText = "";
		            String infoTitle = "";
		            String infoText = "";
		            String infoText2 = "";
		            
		            Notification notification = (Notification) event.getParcelableData();
		            RemoteViews views = notification.contentView;
		            Class secretClass = views.getClass();

		            try {
		                Map<Integer, String> text = new HashMap<Integer, String>();

		                Field outerFields[] = secretClass.getDeclaredFields();
		                for (int i = 0; i < outerFields.length; i++) {
		                    if (!outerFields[i].getName().equals("mActions")) continue;

		                    outerFields[i].setAccessible(true);

		                    ArrayList<Object> actions = (ArrayList<Object>) outerFields[i].get(views);
		                    for (Object action : actions) {
		                        Field innerFields[] = action.getClass().getDeclaredFields();

		                        Object value = null;
		                        Integer type = null;
		                        Integer viewId = null;
		                        for (Field field : innerFields) {
		                            field.setAccessible(true);
		                            if (field.getName().equals("value")) {
		                                value = field.get(action);
		                            } else if (field.getName().equals("type")) {
		                                type = field.getInt(action);
		                            } else if (field.getName().equals("viewId")) {
		                                viewId = field.getInt(action);
		                            }
		                        }

		                        if (type == 9 || type == 10) {
		                            text.put(viewId, value.toString());
		                        }
		                    }
		                }
		                for (String value : text.values()) {
	                    	infoText = infoText + " " + value;
                    	}
		            } catch (Exception e) {
		                e.printStackTrace();
		            }

	    			eventText = infoText;

		    	    sendToMain(eventText);
		    	    
		    	    //CancelNotification(this, event.getCurrentItemIndex());
		    	    
	    		break;
	    }

	    
	    // Do something nifty with this text, like speak the composed string
	    // back to the user.
	}
	
	public static void CancelNotification(Context ctx, int notifyId) {
	    String ns = Context.NOTIFICATION_SERVICE;
	    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
	    nMgr.cancel(notifyId);
	}
	


	@Override
	public void onInterrupt() {
		// TODO Auto-generated method stub
	}
	
	
	@Override
	public void onServiceConnected() {
		Log.d("TAS", "onServiceConnected");
		setServiceInfo();
	}
	

	private void setServiceInfo() {
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        // We are interested in all types of accessibility events.
        info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
        // We want to provide specific type of feedback.
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        // We want to receive events in a certain interval.
        info.notificationTimeout = 100;
        // We want to receive accessibility events only from certain packages.

        // only handle this package
        //info.packageNames[0] = getPackageName();
        //info.packageNames = new String[] {"com.whatsapp", "com.android.email"};
        info.packageNames = new String[] {"com.whatsapp"};
        
        setServiceInfo(info);

	}
	    
	 
}

Receiver:
Code:
private class Receiver extends BroadcastReceiver {

    	 @Override
    	 public void onReceive(Context arg0, Intent arg1) {
    	    String message = arg1.getExtras().getString("message");

    	    addData("WhatsApp", message);
    	 }

    }

und nicht das Manifest vergessen:
Code:
<service android:name=".MyAccessibilityService">
	     <intent-filter>
	         <action android:name="android.accessibilityservice.AccessibilityService" />
	     </intent-filter>
</service>
 
  • Danke
Reaktionen: GENiALi und ChrisMobile
Danke für den Tipp.
Ich werde es die Tage mal damit versuchen.

Leider zicken die HTC Server seit Tagen, daher konnte ich das OpenSenseSDK noch nicht installieren.
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.657
Sempervivum
S
S
Antworten
4
Aufrufe
4.376
mblaster4711
mblaster4711
B
Antworten
3
Aufrufe
1.305
swa00
swa00
Zurück
Oben Unten