[英]How can I tell if my Application is resumed from background?
我希望在應用程序進入后台時鎖定它的應用程序,當它恢復時,我想顯示我自己的鎖定屏幕。 鎖定屏幕是我的應用程序的活動。
成功登記密碼后,用戶可以看到恢復的活動,否則他不能。
我怎樣才能做到這一點?
主要問題是,當您從后台啟動Activity
時,您必須獲得特定的行為。 每次在“ Activities
之間切換時都會調用onPause()
和onResume()
,而不僅僅是在最小化應用程序時。 要解決這個問題,您可以從ActivityManager
獲取當前正在運行的任務,並將其包名稱與您的應用程序進行比較:
private boolean isApplicationInBackground() {
final ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> tasks = manager.getRunningTasks(1);
if (!tasks.isEmpty()) {
final ComponentName topActivity = tasks.get(0).topActivity;
return !topActivity.getPackageName().equals(getPackageName());
}
return false;
}
現在你可以這樣做:
public boolean wasPaused = false;
@Override
public void onPause() {
super.onPause();
if(isApplicationInBackground()) {
wasPaused = true;
}
}
@Override
public void onResume() {
super.onResume();
if(wasPaused) {
lockScreen();
wasPaused = false;
}
}
就是這樣! 我建議你在一個基礎Activity
它,你的所有其他Activities
固有的。
如果您擁有全局活動“MyActivity”並且所有活動都從中擴展,則可以實現此目的。
然后在“MyActivity”上覆蓋onPause和onStop方法
@Override
public void onPause()
{
super.onPause();
setLockStatus(false);
}
@Override
public void onStop()
{
super.onStop();
setLockStatus(true);
}
和:
@Override
public void onResume()
{
super.onResume();
checkLockScreen();
}
編輯:顯然你需要創建方法setLockStatus和checkLockScreen並做任何你想做的事情(比如保存sharedPreferences上的狀態)。
對於任何有興趣的人,如果我正確理解你的問題,我會調查類似的功能,並對我發現的內容不滿意。 我想確定活動何時從后台恢復,而不是從被叫活動恢復活動。
我最終使用了一個boolean標志,該標志從startActivity設置,允許調用Activity確定它是從被調用的Activity還是從后台恢復。 像這樣的東西
private static boolean RESUME_FROM_ACTIVITY;
@Override
public void onResume(){
super.onResume();
if(!RESUME_FROM_ACTIVITY){
// do what you want like lock the screen
}
RESUME_FROM_ACTIVITY = false;
}
@Override
public void startActivity(Intent intent){
RESUME_FROM_ACTIVITY = true;
super.startActivity(intent);
}
由於Android處理靜態和活動堆棧的方式(在本博文中閱讀更多內容) ,這應該在概念上有效。 更多的解釋是, 如果堆空間太大,靜態應該是當應用程序運行時從內存中清除的最后一個東西。 如果沒有堆棧本身被銷毀,活動將不會被銷毀,因此onResume將被調用,它將檢查靜態標志以查看它是來自另一個活動還是來自后台。
靜態甚至可能過度殺傷,因為活動本身也不會被破壞,並且它的全局變量將盡可能長。 這只是概念性的,我們仍處於壓力測試的中間,但它是一種選擇。 如果我們發現任何問題,我會更新這篇文章。
您的活動在其生命周期中具有onResume()
回調。 簡單地覆蓋它並做你需要做的事情。
那么你應該重寫onResume和onPause上的方法
看到這個 ,你會得到它:)
在你的活動中你可以有一個像布爾鎖定的標志;
並在onPause中,您可以將其設置為true。 每次在關鍵位置,您都可以檢查此標志的狀態,如果確實如此,則表示解鎖活動,在解鎖成功后將標志設置為false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.