如何判断android中的通知阴影是否被拉下

如何判断android中的通知阴影是否被拉下,android,notifications,visible,Android,Notifications,Visible,我有一个程序,可以在应用程序未运行时创建通知。为此,我使用了以下代码: public void onWindowFocusChanged(boolean focus) { inFocus = focus; if (inFocus) {//If this activity is in focus, fills data and clears notifications fillData(); Notify.clear(); }

我有一个程序,可以在应用程序未运行时创建通知。为此,我使用了以下代码:

public void onWindowFocusChanged(boolean focus)
{
    inFocus = focus;

    if (inFocus)
    {//If this activity is in focus, fills data and clears notifications
        fillData();
        Notify.clear();
    }
    else
    {
        if (!RespondScreen.inFocus && !ClearDialog.inFocus)
        {
            Creates a notification
        }
    }
}
这可以正常工作,但拉下通知遮光罩时除外。这会导致活动不处于焦点,并且由于其他两个活动都不处于焦点,因此会创建通知。此通知将在遮阳帘拉回后立即销毁,但它会对用户造成恼人的、不必要的干扰。是否有一些设置可以用来测试通知阴影是否处于焦点位置,或者完全以另一种方式

编辑:根据Qberticus的建议,我找到了一个可行的解决方案:

    public void onWindowFocusChanged(boolean focus)
{
    if (focus)
    {//If this activity is in focus, fills data and clears notifications
        inFocus = focus;
        fillData();
        Notify.clear();
    }
}

@Override
public void onPause()
{
    super.onPause();
    inFocus = false;
    Handler handler = new Handler();  
    handler.postDelayed(new Runnable() {  
         public void run() {  
             if (!RespondScreen.inFocus && !ClearDialog.inFocus)
             {
                Intent notifier = new Intent();
                notifier.setAction("itp.uts.program.NOTIFY");
                Bundle bundle = new Bundle();
                bundle.putBoolean("StartNotify", true);
                bundle.putBoolean("StartSound", false);
                notifier.putExtras(bundle);
                getApplicationContext().startService(new Intent(notifier));
             }
         }  
    }, 200);   
}

onResume方法由于某种原因无法使用Notify.clear(),因此我将我的尝试与Qberticus的建议结合使用。这有点笨拙,但效果很好。

我不相信有办法,但我可能错了。然而,我认为在通知阴影关闭时进行检测是实现您想要的目标的错误方式


您可能应该通过
activity#onResume
activity#onPause
跟踪您的活动是否为活动。比如说,如果调用了
onResume
,则在某处设置一个标志,当调用
onPause
时,将其重置。如果设置了该标志,则您的活动处于打开状态,因此不要发送通知。

对于具有多个活动的应用程序,是否有任何方法可以实现此功能?我尝试了与您的建议类似的方法,但在活动之间转换时出现了相同的问题:通知很快被发送,然后在第二个活动恢复时被销毁。您可以使用处理程序和sendMessageDelayed,然后给它10秒或适合您的应用程序的时间。然后,如果仍设置了该标志,则发布通知。如果从服务运行,则可以使用
HandlerThread
,然后使用
getLooper
并将其传递给
处理程序
。隐藏通知栏后不会执行onResume。您指的是什么干扰?