mparaz,
有多种方法可以轻松地完成您想做的事情。在此之前,我想解决您问题中的一个非常重要的缺陷。应用程序不是活动,活动也不是应用程序。因此,应用程序不能位于前台或后台。这是仅为活动保留的。
一个简单的例子,然后给你答案。您的服务是您的应用程序的一部分。应用程序已加载,但活动未加载。如果您的应用程序未加载,您的服务将无法运行。我之所以强调这一点,是因为它是 Android 中的一个重要哲学,理解这些术语的正确使用以及定义它们的概念将使您将来变得更加容易。
一个简单的解决方案
您可以扩展应用程序对象并在类中保留一个简单的公共标志。然后,您可以在 Activity 进入后台时将该标志设置为 false,而在进入前台时将该标志设置为 true(当然反之亦然)。
扩展应用程序:
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;
}
在您的服务中(您称之为 Toast 的地方)
if (MyApplication.uiInForeground)
Toast.makeText(someContext, myMsg).show();
真的就是这么简单。哦是的...不要忘记告诉清单您正在扩展应用程序。对于 AndroidManifest.xml 中的应用程序声明
<application android:name=".MyApplication" .... >
<!-- All other components -->
</application>
希望这可以帮助,
模糊逻辑