如何判断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。您指的是什么干扰?