2016-03-01 39 views
1

我有一个IntentService每小时刷新一次服务器的数据(不推送通知)。如果有任何新数据,它应该在应用程序内部时更新界面,或者当我的应用程序不在前台时发送通知。 我的问题是:如果我的应用程序在前台运行,我如何确定哪个应用程序在前台运行或更容易? 我不需要知道什么活动,只是我的应用程序的一般包名是完全正常的!确定我的应用程序是否在前台

两件事至今我会反对用我发现:

  1. ActivityManager.getRunningTasks() - 它被弃用,由谷歌提到在未来
  2. usagestats机可能会破坏 - 看起来不错,但如果用户必须提供我的应用UsageStats权限,那真的很不方便。

我有点困惑,为什么我无法找到解决方案..我认为这不是一个不寻常的做法或任何其他。

谢谢!

+1

[检查,如果一个Android应用程序在后台运行]的可能的复制(http://stackoverflow.com/questions/3667022/checking-if-an- android-application-is-running-in-the-the-background) –

+0

可能的重复[如何判断Android应用是否在前台运行?](http://stackoverflow.com/questions/5504632/how-can-我告诉,如果Android应用程序运行在前台) – K2evil

+1

谷歌解决方案在这里:https://stackoverflow.com/a/48767617/1269737 – user1269737

回答

1

可以解决简单的方法你的问题,但这个工作交给自己的包和服务

1:在您的主要活动定义布尔变量
2:在您的主要活动中的onCreate梅索德更改值变量设置为true
3:在的OnDestroy metheo它更改为假

public class MainActivity extends AppCompatActivity { 
public static boolean appStatus = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    appStatus = true;//fill the variable true : app is running 
    setContentView(R.layout.activity_main); 

} 


@Override 
protected void onDestroy() { 
    super.onDestroy();//fill the variable false : app is not running 
    appStatus = false; 
} 

}

4:在你的服务,你可以检查它无处不在,你想

if(MainActivity.appStatus) 
    { 
     ......yourCode 
    } 
+0

如果我通过应用程序导航,我的mainActivity得到了什么摧毁? –

+0

在这种情况下访问 – tohid

+0

在这种情况下访问[链接](http://stackoverflow.com/a/33818612/3813997):) – tohid

相关问题