How can a Service
check if one of it's application's Activity
is running in foreground?
Use the below method with your package name. It will return true if any of your activities is in foreground.
public boolean isForeground(String myPackage) { ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1); ComponentName componentInfo = runningTaskInfo.get(0).topActivity; return componentInfo.getPackageName().equals(myPackage); }
Add Permission:
<uses-permission android:name="android.permission.GET_TASKS" />
Use SharedPreferences to save the status of your app in onResume, onPause etc.
like so:
@Override public void onPause() { super.onPause(); PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isActive", false).commit(); } @Override public void onDestroy() { super.onDestroy(); PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isActive", false).commit(); } @Override public void onResume() { super.onResume(); PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("isActive", true).commit(); }
and then in the service:
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("isActive", false)) { return; }
i used both onPause and onDestroy because sometimes it jumps straight to onDestroy:) it's basically all voodoo
anyway, hope that helps someone
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With