这是我的服务:
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>
答案 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;
}
}