2017-08-09 34 views
0

我想要檢測應用程序當前是否正在運行(即,在後臺或前臺)或不在通知單擊。我已經實現廣播接收器,我想檢查應用程序狀態(運行或不運行)。 我已經試過這個check android application is in foreground or not?。但它沒有像例外那樣工作。 有沒有其他的方法來檢測?檢測應用程序正在運行或沒有在Android通知中點擊通知

+0

有實現你分享的鏈接,其中之一是不工作的許多方面?我認爲使用Application類的人會工作。 – Kharda

+0

[檢查Android應用程序是否在後臺運行]的可能重複(https://stackoverflow.com/questions/3667022/checking-if-an-android-application-is-running-in-the-theground) – Kharda

+1

@Kharda這將檢查應用程序是否處於前臺或後臺,而不是應用程序是否正在運行 – Nainal

回答

2

你可以在這樣的活動中定義一個靜態變量。

class MainActivity extends Activity { 
    public static boolean isAlive = false; 

     @Override 
     public void onStart() { 
     super.onStart(); 
     isAlive = true; 
     } 

     @Override 
     public void onStop() { 
     super.onStop(); 
     isAlive = false; 
     } 
} 

您可以撥打MainActivity.isAlive來檢查活動是否正在運行。

+4

從來沒有設置活動的靜態字段 - 這會導致內存泄漏 – MarkySmarky

+0

@MarkySmarky同意 –

0

這不起作用 - 您的應用程序應該啓動(通過與往常一樣的流程),如果它沒有運行。

您可以將您的BroadcastReceiver的意圖額外傳遞給應用程序,並且應該按照您的需要進行處理。

這是做到這一點的唯一方法。

+0

什麼類型的額外,請你詳細說明?我想檢查應用程序是否正在運行。 – Nainal

+0

舉例說明如果應用程序正在運行並且應用程序未在運行時您想要執行什麼操作... – MarkySmarky

+0

我想在應用程序運行時以及關閉應用程序時打開不同的活動 – Nainal

0

我可以建議你在通知到來時所做的事情。在您的活動中覆蓋超級方法onNewIntent(意圖意圖),您有待通過的意圖,意味着當用戶按下通知時將打開的期望活動。在這裏,當你的應用程序在前臺時,這個方法將被調用,如果你的應用程序被終止,那麼onCreate()將被調用。還有一件事是讓您的活動在Manifest中位居榜首。

In Manifest:  <activity 
      android:name=".activities.TokenActivity" 
      android:label="@string/app_name_short" 
      android:launchMode="singleTop"/> 

In Activity: @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     loadCouponFragment(intent.getExtras()); 
    } 
+0

您的解決方案是合法的,但它發生在廣播接收器已啓動應用程序之後。 – MarkySmarky

0

你應該看看一個新組件Handling Lifecycles。您可以輕鬆檢查當前的活動狀態,片段,服務,甚至是進程ProcessLifecycleOwner

例如:

class CustomApplication extends Application { 

    private static Lifecycle lifecycle; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     lifecycle = ProcessLifecycleOwner.get().getLifecycle(); 
    } 

    public static Lifecycle.State getCurrentState(){ 
     return lifecycle.getCurrentState(); 
    } 
} 

然後你就可以檢查state

if(customApplicationgetCurrentState().isAtLeast(Lifecycle.State.RESUMED)){ 
       //do something 
    } 

您還可以添加一個觀察者聽的變化。

public class CustomApplication extends Application { 

private static Lifecycle lifecycle; 

public static Lifecycle.State getCurrentState() { 
    return lifecycle.getCurrentState(); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    lifecycle = ProcessLifecycleOwner.get().getLifecycle(); 
    lifecycle.addObserver(new SomeObserver()); 
} 

public static class SomeObserver implements LifecycleObserver { 

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) 
    void onCreate() { 
     Log.d("Observer", ": onCreate"); 
    } 

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP) 
    void onStop() { 
     Log.d("Observer", ": onStop"); 
    } 

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 
    void onResume() { 
     Log.d("Observer", ": onResume"); 
    } 
} 
} 

Adding Components to your Project

相關問題