在辅助消息传递应用查看消息时关闭默认消息传递应用的通

时间:2017-10-12 22:34:09

标签: java android

我创建了一个SMS应用程序,该应用程序是为默认消息传递应用程序的备份而创建的。它在收到消息时向用户显示通知,因此只能在用户认为合适的某些情况下使用。它应该是一个辅助消息传递应用程序,因此不应将其设置为默认值。

有没有办法实现以下功能?

如果用户收到消息并在我的消息传递应用程序中打开消息,那么该应用程序应该查找默认消息传递应用程序是什么并取消通知,以便用户不必在已经响应之后关闭该附加通知他们收到的信息。

17年10月12日

我发现我可以获得默认短信应用的包,如下所示:

Telephony.Sms.getDefaultSmsPackage(context);

有没有办法在提供给定包时取消通知?

17年10月14日

我现在正在使用NotificationListener服务来接收所有发布的通知。我现在看到的问题是,当我收到我要取消的特定通知,并且我在NotificationManager上调用取消时,它不会取消。

notificationManager.cancel(sbn.getTag(), sbn.getId());

我甚至还尝试取消所有活动通知,如下所示,并关闭除默认短信应用程序之外的所有通知。这有什么原因吗?

notificationManager.cancelAll();

17年10月15日

这是我的onNotificationPosted()函数:

@Override
public void onNotificationPosted(StatusBarNotification sbn)
{
    super.onNotificationPosted(sbn);
    NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    if (DefaultSMSPackage == null)
        DefaultSMSPackage = Telephony.Sms.getDefaultSmsPackage(getApplicationContext());

    if (sbn.getPackageName().equals(DefaultSMSPackage))
        nManager.cancel(sbn.getTag(), sbn.getId());
}

1 个答案:

答案 0 :(得分:1)

使用NotificationListenerService,您的应用可以跟踪和解除从其他应用发布的Notification。实施onNotificationPosted()方法可让您的应用在发布时获得Notification个,getActiveNotifications()方法可让您访问其他任何可见的NotificationService生命期内指出。

如果您想解雇Notification,则会调用NotificationListenerService cancelNotification()方法之一。如果您在21之前支持Android版本,请确保为版本使用适当的重载。在21之前,您需要使用cancelNotification(String pkg, String tag, int id)。从21开始,cancelNotification(String key)是要使用的,而另一个则在targetSdkVersion为21 +时不起作用。

要激活NotificationListenerService,用户必须在设备设置中手动启用它。该设置的确切位置因Android版本而异,可能与某些制造商有关,因此如果您的应用可以为该用户打开该页面,将会很有帮助。 Settings.ACTION_NOTIFICATION_LISTENER_SETTINGSIntent您可以与startActivity()一起使用的resolveActivity()操作。正如文档所述:

  

在某些情况下,匹配的活动可能不存在,因此请确保您不会受到此保护。

您可以通过检查Intent上调用的ActivityNotFoundException未返回null,或者可能通过捕获startActivity()可能抛出的expect来执行此操作。