如何判断是否在android中下拉通知窗口

问题描述:

我有一个程序在应用程序未运行时创建通知。为此,我使用了以下代码:如何判断是否在android中下拉通知窗口

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的建议。这有点笨拙,但它完美的作品。

+0

你指的是什么**干扰**? – 2016-05-04 14:39:54

我不相信有一种方法,但我可能是错的。但是,我认为检测通知阴影何时停止是你想要的东西的错误方式。

你可能应该跟踪你的活动是否通过Activity#onResumeActivity#onPause。假设,如果onResume被称为某处设置标志,并且被称为重置它。如果该标记已设置,您的活动已打开,因此请勿发送通知。

+0

有没有什么办法可以为具有多个活动的应用程序实现这一点?我尝试了类似于您的建议,但在活动之间转换时发生了同样的问题:通知很快发送,然后在第二个活动恢复时销毁。 – mbauer14 2010-07-01 20:49:05

+0

你可以使用Handler和sendMessageDelayed,并给它说10秒钟或适合你的应用程序的东西。然后如果该标志仍然设置,则发布通知。如果从服务中运行,那么你可以使用'HandlerThread',然后使用'getLooper'并将它传递给'Handler'。 – Qberticus 2010-07-01 20:55:06

+3

隐藏通知栏后,onResume未被执行。 – 2014-12-21 04:33:20