Показывать уведомление, только если активность не отображается - PullRequest
9 голосов
/ 25 августа 2011

У меня есть фоновая задача, которую я хотел бы выполнитьДело в том, что когда задача завершается, я хотел бы вызвать новую активность, чтобы показать результат пользователю, только если отображается моя основная активность, в противном случае я хотел бы отправить только уведомление, чтобы пользователь мог видеть, что действиезавершено, и я могу открыть его, когда ему захочется.

Я думал об использовании службы для обработки запуска и завершения фоновой задачи и трансляции сообщения, когда она заканчивается, но в этом случае у меня нетвозможность узнать, была ли показана активность или трансляция не была обработана, и я должен отправить уведомление.

Так что это моя проблема, и поскольку мои знания и опыт в области фоновых задач и услуг ограничены, я решил спроситьза помощь.

Заранее спасибо за чтение моего дела, надеюсь на помощь!

Ответы [ 4 ]

24 голосов
/ 25 августа 2011

Вот хорошая статья, которая описывает, как реализовать то, что вы хотите: Активность или Уведомление посредством заказанной трансляции .

Основная идея - использовать упорядоченные трансляции. Вы должны создать BroadcastReceiver, который будет жить без каких-либо действий. Для этого вы должны объявить это в файле AndroidManifest.xml. Этот приемник покажет Notification. Также вы должны зарегистрировать еще один BroadcastReceiver с более высоким приоритетом в вашей основной деятельности, который будет отображать что-то на экране. Тогда вам просто нужно отправить заказанную трансляцию.

4 голосов
/ 25 августа 2011

Попробуйте вот так.

private static boolean isInForeground;

onResume(){
    isInForground = true;
}
onPause(){
   isInForground = false;
}

если isInForground равно true, тогда активность в Forground (отображается), в противном случае не отображается.

, если вы хотите узнать откуда-либо, добавьтедалее в MainActivity.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

    onResume(){
         pref = PreferenceManager.getDefaultSharedPreferences(this);
         prefEditor = prefs.edit();
         prefEditor.putBoolean("isInForeground",true);
         prefEditor.commit();
    }

    onPause(){
             pref = PreferenceManager.getDefaultSharedPreferences(this);
             prefEditor = prefs.edit();
             prefEditor.putBoolean("isInForeground", false);
             prefEditor.commit();
    }

Тогда от вашего сервиса.

pref = PreferenceManager.getDefaultSharedPreferences(this);
if(pref.getBoolean("isInForeground", false)){
       //MainActivity is in forground

}
else{
      //not in forground
}
1 голос
/ 25 августа 2011

Похоже, вы хотите реализовать задачу в потоке из службы. Вы можете иметь постоянное статическое логическое значение в Activity, которое говорит о том, отображается ли действие. Активность видна пользователю в onResume() и не видна при вызове onPause(). Установите логическое значение true в onResume() и false в onPause().

0 голосов
/ 24 ноября 2015

вы можете использовать SharedPreferences; обновите предпочтения для активности, когда она onStart () или onStop (), и просто подтвердите ее в своей службе.

Надеюсь, я помогу.

...