我想要檢測應用程序當前是否正在運行(即,在後臺或前臺)或不在通知單擊。我已經實現廣播接收器,我想檢查應用程序狀態(運行或不運行)。 我已經試過這個check android application is in foreground or not?。但它沒有像例外那樣工作。 有沒有其他的方法來檢測?檢測應用程序正在運行或沒有在Android通知中點擊通知
回答
你可以在這樣的活動中定義一個靜態變量。
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
來檢查活動是否正在運行。
從來沒有設置活動的靜態字段 - 這會導致內存泄漏 – MarkySmarky
@MarkySmarky同意 –
這不起作用 - 您的應用程序應該啓動(通過與往常一樣的流程),如果它沒有運行。
您可以將您的BroadcastReceiver的意圖額外傳遞給應用程序,並且應該按照您的需要進行處理。
這是做到這一點的唯一方法。
什麼類型的額外,請你詳細說明?我想檢查應用程序是否正在運行。 – Nainal
舉例說明如果應用程序正在運行並且應用程序未在運行時您想要執行什麼操作... – MarkySmarky
我想在應用程序運行時以及關閉應用程序時打開不同的活動 – Nainal
我可以建議你在通知到來時所做的事情。在您的活動中覆蓋超級方法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());
}
您的解決方案是合法的,但它發生在廣播接收器已啓動應用程序之後。 – MarkySmarky
你應該看看一個新組件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");
}
}
}
- 1. 在應用程序中檢測通知
- 2. Android通知不斷啓動應用程序(即使我沒有點擊通知)?
- 3. 在android中點擊通知
- 4. 檢查是應用程序通知正在運行
- 5. 如果用戶沒有點擊通知,swift通知更新應用程序
- 6. Android中通知點擊沒有影響
- 7. 顯示通知應用程序是否正在運行或在後臺運行
- 8. 如何在應用程序運行時獲取或檢測FCM通知?
- 9. Titanium:在沒有點擊通知的情況下打開應用程序時檢查iOS通知
- 10. 對設備沒有通知,但沒有在應用程序通知-Android推送通知
- 11. 點擊通知,啓動應用程序在android
- 12. 點擊通知進入我的應用程序在Android
- 13. 沒有點擊事件的Android通知?
- 14. 檢測用戶點擊通知
- 15. 檢測用戶點擊本地通知
- 16. Android通知點擊
- 17. Android通知點擊
- 18. 檢測android通知 - 沒有AccessibilityService
- 19. 點擊通知時通知android服務
- 20. Android:如何在應用程序未運行時通知用戶
- 21. iOS:通過點擊一個通知或應用程序圖標處理所有的單點通知
- 22. 隱藏推送通知時,應用程序正在運行
- 23. 在應用程序未運行時收到GCM Android通知
- 24. 從正在進行的通知恢復Android應用程序
- 25. 如何獲取所有應用程序的所有通知都有自定義通知正在運行
- 26. 發送通知給運行應用程序的所有人,Android
- 27. 通知沒有在Android的
- 28. c#通知正在運行的進程
- 29. Android有沒有辦法知道哪些應用程序在通知區域顯示通知?
- 30. Titanium Android通知在用戶單擊通知時執行操作
有實現你分享的鏈接,其中之一是不工作的許多方面?我認爲使用Application類的人會工作。 – Kharda
[檢查Android應用程序是否在後臺運行]的可能重複(https://stackoverflow.com/questions/3667022/checking-if-an-android-application-is-running-in-the-theground) – Kharda
@Kharda這將檢查應用程序是否處於前臺或後臺,而不是應用程序是否正在運行 – Nainal