无法使用NotificationListenerService取消通知

时间:2015-04-22 16:09:32

标签: android android-service android-notifications

这是我的服务:

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");

    }


}

为了进行测试,我希望一旦到达就从任何APP 中删除所有通知。我在onNotificationPosted中调用了Listener.this.cancelAllNotifications();,但它不起作用。

我做错了什么?我在Android 5.0.2版上测试了这个。

P.S。

我已经添加了权限以及意图过滤器,如android所述。

<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>

2 个答案:

答案 0 :(得分:1)

确保&#39;通知访问权限&#39;已激活(已选中)实施 NotificationListenerService 的应用。

可以在&#39;设置&#39;中进行验证。菜单。它位于任一地址,具体取决于Android版本。对于Android 5.0,它应该是: 设置 - &gt;声音&amp;通知 - &gt;通知访问

否则,你可能会发现: 设置 - &gt;安全 - &gt;通知访问

尝试为您的应用启用它,然后尝试清除通知。

答案 1 :(得分:0)

如何让用户启用其通知访问,

您可以显示弹出窗口(“请启用通知访问”),当用户点击“确定”时,它会将用户重定向到设置页面,以启用通知访问设置。

public class Ussd {

    private static Logger logger = LogManager.getLogger(Ussd.class);
    private  static  String query;

    public static void ussdMessages(RoutingContext routingContext){
        String codeService = routingContext.getBodyAsJson().getString("codeService");
        getServiceQuery(codeService).setHandler(r -> {
                System.out.println("query : "+r.result());
            });
    }

    public static Future<String> getServiceQuery(String codeService){
        Future<String> future = Future.future();
        JsonObject params = new JsonObject();
        params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
        params.put("PARAMS", new JsonArray().add(codeService));
        System.out.println(params);
        DB.select(params, res -> {
            if (res.succeeded()) {
               query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
                System.out.println(query);
                future.complete(query);
            } else {
                future.fail(res.cause().getMessage());
            }
        });
        return future;
    }
}