我有前臺服務,可以通過單擊通知中的「X」來停止前臺服務。確定在點擊通知時是否顯示應用程序
當前臺服務停止時,應顯示其他活動。
問題是,我不知道該應用程序是否可見或在單擊「X」按鈕時在後臺。當應用程序可見時,應該更改活動。
我有前臺服務,可以通過單擊通知中的「X」來停止前臺服務。確定在點擊通知時是否顯示應用程序
當前臺服務停止時,應顯示其他活動。
問題是,我不知道該應用程序是否可見或在單擊「X」按鈕時在後臺。當應用程序可見時,應該更改活動。
檢查ab你的活動是否在前臺運行?在這裏你去:
public boolean isRunning(Context ctx) {
try {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground
// task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo.topActivity
.getPackageName();// get the top fore ground activity
PackageManager pm = context.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(
foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo
.loadLabel(pm).toString();
// Log.e("", foregroundTaskAppName +"----------"+
// foregroundTaskPackageName);
if (!foregroundTaskAppName.equals("Your App name")) {
return true;
}
} catch (Exception e) {
Log.e("isAppSentToBackground", "" + e);
}
return false;
}
對於API等級> = 21
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();
for (ActivityManager.AppTask task : tasks) {
Log.d(TAG, "stackId: " + task.getTaskInfo().stackId);
}
對於您的問題沒有100%擔保解決方案。
一個最簡單的是跟蹤在全局變量可見的活動:
public void onResume(){
super.onResume();
App.visibleActivity = this;
}
public void onPause(){
super.onPause();
App.visibleActivity = null;
}
但也有一些重要的事情:
1)不要忘記在的onPause釋放visibleActivity以防止內存泄漏
2)當前onPause和下一個onResume之間存在時間差,當您的應用在技術上處於後臺時
如果如果活動在我得到2項任務,一個是服務,一個是活動的後臺運行。只有當活動被操作系統殺死時,只有一項任務。 – sativa
@sativa:是的,這裏你必須檢查堆棧中的第一個任務總是在前臺 – Jai
@sativa由於該方法已被棄用,因此該代碼不適用於Andoid API Level> = 21 [API文檔鏈接](https ://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks(int)) – harsh201