Как узнать, снят ли оттенок уведомления в андроиде - PullRequest
3 голосов
/ 02 июля 2010

У меня есть программа, которая создает уведомление, если приложение не запущено.Для этого я использовал следующий код:

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.Это немного неуклюже, но работает отлично.

1 Ответ

0 голосов
/ 02 июля 2010

Я не верю, что есть выход, но я могу ошибаться. Тем не менее, я думаю, что обнаружение, когда оттенок уведомлений не работает, - это неправильный способ сделать то, что вы хотите.

Вы, вероятно, должны отслеживать, активна ли ваша активность, с помощью Activity#onResume и Activity#onPause. Скажем, если вызывается onResume, установить флаг где-нибудь, а когда вызывается onPause, сбросить его. Если флаг установлен, ваша активность открыта, поэтому не отправляйте уведомление.

...