嗨,大家好,我用這個方法來檢查,如果我的應用程序在後臺與否:檢查時,我的應用程序在後臺時後退按鈕和家庭按鈕
public static boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
for(RunningTaskInfo rti: tasks) {
ComponentName cn = rti.topActivity;
LogHelper.i(TAG, "Component Name: " + cn.getPackageName());
}
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
我調用此方法在我的活動的onPause,的onStop,的onDestroy 這些是我的結果:
當我在我的活動,我點擊Android的家庭按鈕,它遵循這一流程:
的onPause - >是在後臺? true onStop - >在後臺?真
它是完美的。 問題是當我點擊從活動返回到Android主頁的android-back-button時。這是流程:
onPause - >是否在後臺? false onStop - >在後臺?假 onDestroy - >在後臺?假
如果你檢查我有一個登錄貓郵票,它總是(在後退按鈕的情況下)的代碼杜絕這樣的:
03-29 00:46:39.324:I/DFFramework(15344) :MusicUtils - 組件名稱:my-activity-name
這意味着我的活動不在後臺。 我能做什麼?
更新:
我正在添加更多關於我的方案的信息。我正在開發音樂播放器,因此如果應用程序關閉但音樂仍在播放(否則音樂將被暫停),我必須捕獲此類事件以啓動前臺音頻服務。因此我必須在應用程序處於後臺(比如當您單擊android-home-button時)或關閉應用程序時(例如,當您單擊android-back-button時)捕獲它。
好問題botteaap。我正在開發音樂播放器,我正在嘗試遵循Google音樂模式。當您正在播放歌曲並且您在應用程序中時Google Music未顯示播放歌曲的通知。當您點擊主頁按鈕(谷歌音樂應用程序在後臺)時,它會顯示通知。我已經這樣做了,但是當你點擊後退按鈕並返回到Android主屏幕時,問題仍然存在。在這種情況下,我的應用程序不會去背景,你可以看到... – StErMi 2012-03-29 12:45:24
我編輯了我的答案,希望它有幫助。您還可以查看音樂應用的Android源代碼,看看它們在那裏如何實現。 – botteaap 2012-03-29 13:18:57
botteaap我已經使用音樂播放器的源代碼作爲操場/書房,事實上一切正常。但是,當一首歌被播放時,類似的音樂播放器(舊的播放器)開始播放通知,而不是播放歌曲並且該應用程序處於後臺播放時,這會浪費大量資源和時間。正如我所說我已經使用該方法檢查我的onPause,並且它在單擊home按鈕時正在工作,但onPause和onDestroy總是在一個活動被銷燬時被調用,並且當您返回時或者當您正在遍歷應用程序內。 – StErMi 2012-03-29 13:34:28