8

Ich möchte die Benachrichtigungen lesen/zugreifen/protokollieren, die von anderen Anwendungen in der Benachrichtigungsleiste ausgelöst werden.Wie man benachrichtigt wird, wenn eine Benachrichtigung gemeldet wird

Ich suchte Intents und PendingIntents viel, aber konnte keine Lösung bekommen.

Muss meine Anwendung benachrichtigt werden, wenn eine Benachrichtigung ausgelöst wird?

Oder bietet Android-System etwas, um Benachrichtigungen von den Anwendungen auf Benutzerebene zu lesen?

Antwort

5

Endlich die Antwort bekommen. !!! Mit AccessibilityService

public class NotificationService extends AccessibilityService { 

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    // TODO Auto-generated method stub. 
//Code when the event is caught 
    } 
@Override 
public void onInterrupt() { 
    // TODO Auto-generated method stub. 

} 

@Override 
protected void onServiceConnected() { 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
     info.feedbackType = 1; 
      info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
     info.notificationTimeout = 100; 
     setServiceInfo(info); 
    } 
} 

Und mein Manifest ist:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="org.test.notify" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk android:minSdkVersion="8" /> 
<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <service android:name=".NotificationService" android:enabled="true"> 
      <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.accessibilityservice.AccessibilityService"/> 
     </intent-filter> 
    </service> 
    </application> 
</manifest> 

Genießen Coding !!!. :)

+1

Der Code dient nur zum Abfangen von Ereignissen im Zusammenhang mit Benachrichtigungen. Bei Änderung 'info.eventTypes =' können wir verschiedene Arten von Ereignissen abfangen. – Kishore

+0

Ich versuche, mich an der Methode "service connected" anzumelden, aber es schlägt fehl, erfordert alle Berechtigungen – Calvin

+0

@Calvin: Sie müssen den Accessibility-Dienst manuell von den Einstellungen (Einstellungen -> Accompatibility) schalten – Kushal

0

Es gibt keine API für den Zugriff auf eine Benachrichtigung. Zumindest wäre es ein Sicherheitsloch. Sie können nur einige Ereignisse abfangen, die Benachrichtigungen (wie SMS) verursachen.

0

Ein Notification wird durch Senden einer Intent ausgelöst.

Intent intent = new Intent(this, NotificationReceiver.class); 

Die NotificationReceiver fängt den Intent und öffnet sich ein Notification auf.

Es ist durchaus möglich, das gleiche Intent in einer Ihrer Anwendungen mit einem BroadCastReceiver fangen und Filter auf die Intent Sie wollen.

+0

Es gibt keine Absicht für "Status der Benachrichtigungsleiste ändern" oder "Benachrichtigung ausgelöst". – Kishore

+0

Das stimmt, aber die Benachrichtigungen werden mit Intents ausgelöst. Und Intents können mit einem BroadCastReceiver abgefangen werden. Natürlich hängt alles davon ab, auf welche Art von Notification Sie zugreifen möchten. – DroidBender

+0

Eigentlich möchte ich alle Benachrichtigungen protokollieren. Also suche ich nach einer generischen Methode, um alle Benachrichtigungen zu erfassen. – Kishore

Verwandte Themen