3

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

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 的建议。这有点笨拙,但效果很好。

4

1 回答 1

0

我不相信有办法,但我可能是错的。但是,我认为检测通知阴影何时关闭是实现您想要的错误的方法。

Activity#onResume您可能应该通过和跟踪您的活动是否是活动的Activity#onPause。比如说,如果onResume被称为在某处设置一个标志,何时onPause被称为重置它。如果设置了标志,则您的活动已打开,因此不要发送通知。

于 2010-07-01T20:40:03.530 回答