如果应用程序位于前台,Toast如何才能显示?

mpa*_*raz 5 android

我有一个Toast从内部调用的Service.无论设计的状态如何,它总是会出现.

如何让它只在我的应用程序位于前台时显示,而不是在其他应用程序位于前面时?也就是说,无需将其移动到Activity代码中.

Fuz*_*gic 11

mparaz,

有很多方法可以轻松地完成您想要的任务.在我这样做之前,我想谈谈你的问题中一个非常重要的缺陷.应用程序不是活动,活动不是应用程序.因此,应用程序不能位于前台或后台.这仅限于活动.

一个简单的例子,然后你回答.您的服务是您的应用程序的一部分.虽然Activity不是,但是加载了应用程序.如果未加载您的应用程序,则您的服务无法运行.我只强调这一点,因为它是Android中的一个重要哲学,理解这些术语的正确使用以及定义它们的概念将使您在将来更容易.

简单的解决方案

您可以扩展Application对象并在类中保存一个简单的公共标志.然后,您可以在活动进入后台时将标志设置为false,并在前景时将其设置为true(当然,反之亦然).

扩展应用程序:

public class MyApplication extends Application
{
    static public boolean uiInForeground = false;
}
Run Code Online (Sandbox Code Playgroud)

设置标志:在您的活动中......

//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;
}
Run Code Online (Sandbox Code Playgroud)

在您的服务中(您称之为Toast)

    if (MyApplication.uiInForeground)
        Toast.makeText(someContext, myMsg).show();
Run Code Online (Sandbox Code Playgroud)

它真的很简单.哦是的...不要忘记告诉清单你正在扩展应用程序.对于AndroidManifest.xml中的Application声明

<application android:name=".MyApplication" .... >
   <!-- All other components -->
</application>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助,

FuzzicalLogic