我有一个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
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |