Вопрос по android – Как сделать так, чтобы тосты появлялись только в том случае, если приложение находится на переднем плане?

4

у меня естьToast это называется изнутриService. It always appears regardless of the state of the app, as designed.

Как сделать так, чтобы оно появлялось только тогда, когда мое приложение находится на переднем плане, а не когда другие приложения находятся впереди? То есть, не перемещая его вActivity код.

Ваш Ответ

3   ответа
9

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

Быстрый пример, а затем вам ответить. Ваша служба является частью вашего приложения. Приложение загружено, а активность - нет. Если ваше приложение не было загружено, ваша служба не может работать. Я только подчеркиваю это, потому что это важная философия в Android, и понимание правильного использования этих терминов и определяющих их понятий значительно облегчит вам задачу в будущем.

A Simple Solution

Вы можете расширить объект Application и удерживать простой общедоступный флаг в классе. Затем вы можете установить флаг в значение «ложь» в любое время, когда действие переходит на задний план, и значение «истина», когда оно выходит на передний план (или наоборот, конечно).

Расширение приложения:

public class MyApplication extends Application
{
    static public boolean uiInForeground = false;
}

Установка флага: в вашей деятельности ...

//This may be done in onStart(), onResume(), onCreate()... 
//... whereever you decide it is important. 
//Note: The functions here do not include parameters (that's Eclipse's job).
public void onStart()
{//Notice the static call (no instance needed)
    MyApplication.uiInForeground = true;
}

public void onPause()
{
    MyApplication.uiInForeground = false;
}

К вашим услугам (где вы называете тост)

    if (MyApplication.uiInForeground)
        Toast.makeText(someContext, myMsg).show();

Это действительно так просто. О да ... Не забудьте сообщить манифесту, что вы продлеваете Приложение. Для объявления вашего приложения в AndroidManifest.xml

<application android:name=".MyApplication" .... >
   <!-- All other components -->
</application>

Надеюсь это поможет,

FuzzicalLogic

Спасибо! Для вашего первоначального разъяснения - по "приложению" Я имею в виду это с точки зрения непрофессионала, а неandroid.app.Application- так что это будет "любой"Activity. & Quot; mparaz
2

public class MyActivity {

    private boolean isInForeground;

    protected onResume() {
        isInForeground = true;
    }

    protected onPause() {
        isInForeground = false;
    }

    private displayToast() {
        if(isInForeground) {
           Toast.makeToast().show();
        }
    }

}
1

но я думаю, что если вы поместите свой тост в onResume (), он запустится только в вашем приложении.

Спасибо за ответы. Да, это правильно, потому чтоonResume() будет вызываться только тогда, когда мое приложение находится на переднем плане. Тем не менее, я бы хотел, чтобы тост был внутри моегоService. mparaz

Похожие вопросы