Can't cancel Notification using NotificationListenerService

冷暖自知 提交于 2019-11-28 08:47:12

问题


This is my service:

public class Listener extends NotificationListenerService {
    Context context;

    @Override

    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    @Override

    public void onNotificationPosted(StatusBarNotification sbn) {
        String pack = sbn.getPackageName();
        String ticker = sbn.getNotification().tickerText.toString();
        Bundle extras = sbn.getNotification().extras;
        String title = extras.getString("android.title");
        String text = extras.getCharSequence("android.text").toString();

        Log.i("Msg",pack);
        Log.i("Msg",ticker);
        Log.i("Msg",title);
        Log.i("Msg",text);

        Intent msgrcv = new Intent("Msg");
        msgrcv.putExtra("package", pack);
        msgrcv.putExtra("ticker", ticker);
        msgrcv.putExtra("title", title);
        msgrcv.putExtra("text", text);
            LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv);
        Toast.makeText(context, "GOT SOMETHING", Toast.LENGTH_LONG).show();

 //final String T=  sbn.getKey();

        Listener.this.cancelAllNotifications();
    }

    @Override

    public void onNotificationRemoved(StatusBarNotification sbn) {
        Log.i("Msg","Notification Removed");
    }
}

For testing, I would like to DISMISS ALL NOTIFICATIONS FROM ANY APP as soon as they arrive. I have called Listener.this.cancelAllNotifications(); inside onNotificationPosted, but it does not work.

What am I doing wrong ? I am testing this on android version 5.0.2.

P.S.

I HAVE added the permissions along with the intent filter, as android mentions.

<service android:name=".NotificationListener"
          android:label="@string/service_name"
          android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
     <intent-filter>
         <action android:name="android.service.notification.NotificationListenerService" />
     </intent-filter>
 </service>

回答1:


Make sure the 'Notification Access' is active (checked) for the app implementing your NotificationListenerService.

It can be verified in 'Settings' menu. It is at either of the addresses depending upon the Android version. For Android 5.0, it should be at: Settings -> Sound & notification -> Notification Access

Or else, you may find at: Settings -> Security -> Notification Access

Try enabling it for your app and then try to clear the notifications.




回答2:


For how to let user enable their Notification Access,

You can show a Popup ("Please enable Notification Access"), and when user clicks "OK", it will redirect user to the settings page, to enable the Notification Access settings.

private static final String ACTION_NOTIFICATION_LISTENER_SETTINGS = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";

private void openNotificationAccess() {
    startActivity(new Intent(ACTION_NOTIFICATION_LISTENER_SETTINGS));
}


来源:https://stackoverflow.com/questions/29803218/cant-cancel-notification-using-notificationlistenerservice

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