如何查找"优先级应用通知"在请勿打扰设置?

时间:2017-05-03 17:00:41

标签: android android-notifications

我正在尝试以编程方式找出特别绕过“请勿打扰”设置的应用程序。

enter image description here

到目前为止,我使用以下代码检查手机是否设置为“请勿打扰”模式:

public static boolean isDnDModeEnabled(Context context)
{
    if(Build.VERSION.SDK_INT <23)
        return false;

    try {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        int filterValue = notificationManager.getCurrentInterruptionFilter();
        switch(filterValue)
        {
            case NotificationManager.INTERRUPTION_FILTER_ALL : Log.d("DND","Interruption filter all");
                break;
            case NotificationManager.INTERRUPTION_FILTER_ALARMS : Log.d("DND","Interruption filter alarms");
                break;
            case NotificationManager.INTERRUPTION_FILTER_PRIORITY : Log.d("DND","Interruption filter priority");
                break;
            case NotificationManager.INTERRUPTION_FILTER_UNKNOWN : Log.d("DND","Interruption filter unknown");
                break;
            case NotificationManager.INTERRUPTION_FILTER_NONE : Log.d("DND","Interruption filter none");
                break;

        }
        if(filterValue == NotificationManager.INTERRUPTION_FILTER_ALL)
            return false;
        else if(filterValue == NotificationManager.INTERRUPTION_FILTER_PRIORITY)
        {
            //Logic based on which apps are allowed as priority

            return true; //or false
        }
        else
            return true;
    }
    catch(Exception e)
    {
        return false;
    }
}

当我点击优先级应用程序通知标签时,我会获得所有已安装应用的列表,我可以从中选择允许哪些应用作为优先级例外。

我的问题是如何以编程方式获取允许作为“请勿打扰”模式的优先级例外的应用列表,从而定义替换上述代码中的注释的逻辑?任何解决方案都将受到全面的赞赏。

2 个答案:

答案 0 :(得分:2)

您正在寻找一种方法来确定系统上哪些应用具有Notification.IMPORTANCE_MAX的通知重要性,不好意思但非系统应用无法做到这一点。您需要访问INotificationService,以便拨打getImportance(packageName)。请参阅the Notification Manager source,但它guarded by a check可以确保您使用系统应用或您传递的套餐,以便反映出来......

Google允许应用通过NotificationManager getImportance()see docs)获取自己的通知重要性,但您无法使用任意包调用它。

这里的另一个答案是引用从系统设置应用程序检查来源,这正是我所做的,经过一段时间跟踪代码后,我发现了他们如何确定哪些应用程序应该显示在&#34;覆盖请勿打扰&#34; this code here的菜单让我走上了发现如何确定IMPORTANCE_*

的道路

很抱歉,但其他回答者提出的建议也不会起作用,因为它们不正确(packages.xml没有信息)或者要求root不是所有设备都可靠。

答案 1 :(得分:0)

您可以尝试以下事项(其中一些可能需要权限访问权限):

  1. 下载设置应用的源代码,了解设置应用的方式 正在上榜。
  2. 分析packages.xml。通常有很多关于应用程序的信息存储在那里。
  3. 检查列表是否存储在settings.db