1

Ich habe eine NotificationListenerService erstellt, um einen Sound wiederzugeben, sobald ich eine PUSH-Benachrichtigung erhalte. Aber die NotificationListenerService informiert mich über jede Benachrichtigung aufgetreten systemweit, und was ich versuche zu tun ist, um das Verhalten der NotificationListenerService zu beschränken, so dass auf Benachrichtigungen von meiner App nur zu antworten. Mit anderen Worten, der Rückruf onNotificationPostedPosted in den unten angegebenen Code in NLS Abschnitt wird aufgerufen, auch wenn ich das USB-Kabel an das Gerät und den Code in diesem Callback ausgeführt wird, und ich möchte den Code in
`onNotificationPostedPosted 'zu nur ausgeführt werden, wenn meine App eine Benachrichtigung sendet.So rufen Sie den PendingIntent im NotificationListenerService ab

um dieses Problem zu lösen, wie in der unten stehenden Code gezeigt, ich zusätzlich zu meinem Intent wie folgt hinzugefügt:

intent.putExtra("key_message", "MANT-App"); 

Das Problem, das ich nicht heißt haben, dass ich keinen Zugang zu dieser Absicht haben in ` onNotificationPostedPosted '.

Bitte lassen Sie mich wissen, wie man die Intent oder die PendingIntent in `onNotificationPostedPosted 'bekommt/Zugang?

Code:

Intent intent = new Intent(getApplicationContext(), HomeActivity_.class); 
    intent.putExtra("key_message", "MANT-App"); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    String title = getString(R.string.app_name); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher); 
    builder.setStyle(new NotificationCompat.BigTextStyle().bigText(msg)).setContentText(msg).setContentTitle(title); 
    builder.setContentIntent(contentIntent).setAutoCancel(true); 
    builder.setLights(Color.argb(1, 255, 0, 0), 400, 1300); 
    builder.setOngoing(true); 
    builder.setAutoCancel(true); 

    ((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, builder.build()); 

NLS

@Override 
public void onNotificationPosted(StatusBarNotification sbn) { 
    super.onNotificationPosted(sbn); 
    Log.w(TAG, "onNotificationPosted"); 

    Log.d(TAG, "sbn.describeContents(): " + sbn.describeContents()); 
    Log.d(TAG, "getNotification().contentIntent.describeContents(): " + sbn.getNotification().contentIntent.describeContents()); 

    Message msg = handler.obtainMessage(); 
    msg.obj = "onNotificationPosted"; 
    handler.sendMessage(msg); 

    mNotificationRemoved = false; 
    if (!NLSNotificationTone11.TONE_IS_PLAYING) { 
     NLSNotificationTone11.TONE_IS_PLAYING = true; 
     new ThreadPlayTone(this, NLSNotificationTone11.DURATION_OF_RING_TONE).start(); 
    } 
} 

Antwort

0

mir bitte mitteilen, wie die Intent oder erhalten/Zugang PendingIntent in onNotificationPosted()?

Sie können nicht. Sie können den PendingIntent senden, aber Sie können ihn nicht untersuchen.

Sie können jedoch den Paketnamen des Pakets mit der Nummer Notification abrufen, so dass Sie alle Benachrichtigungen außer denen aus Ihrer eigenen App ignorieren können.

In onNotificationPosted(StatusBarNotification sbn):

if (sbn.getPackageName().equals("my.package.name")) { 
    // do stuff 
} 

EDIT: Es sieht aus wie Sie die Intent von einem PendingIntent mit Reflexion beginnend mit Android 4.2.2 bekommen können. Machen Sie es wie folgt aus:

PendingIntent pendingIntent = ... // PendingIntent 
    try { 
     Method method = PendingIntent.class.getDeclaredMethod("getIntent"); 
     method.setAccessible(true); 
     Intent intent = method.invoke(pendingIntent); 
     // Here you should have the Intent that is wrapped by the PendingIntent. 
     // You should be able to access the component name, extras, 
     // flags, etc. in the Intent 
    } catch (Exception e) { 
     // Problem using reflection 
    } 
0
PendingIntent pendingIntent = statusBarNotification.getNotification().contentIntent 

Verwendung dieses Verfahren PendingIntent für API-Ebene 18 & Höhere in NotificationListener Klasse

erhalten
Verwandte Themen