[Android] 自分のアプリがフォアグラウンド(前面)かバックグラウンド(背面)か未起動か調べる

スポンサーリンク

目的

タイトルのままだけど、Push通知を受けたときとかにフォアグラウンドにいるときは何もしないとかやりたいときに使う。

基本的に以下を参考にしている。違うのはどのActivityが一番上にいるかを渡すようにしたことくらい。

まぁ、基本的に丸パクリw

実装

/**
* プロセスステータス
*/
sealed class AppProcessStatus(open val activityName: String?) {
    // プロセスが存在しない
    object GONE : AppProcessStatus(null)

    // 最前面で起動中
    data class FOREGROUND(override val activityName: String) : AppProcessStatus(activityName)

    // バックグラウンド状態
    data class BACKGROUND(override val activityName: String) : AppProcessStatus(activityName)

    companion object {

        fun current(context: Context): AppProcessStatus {
            val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
            if (!existsAppTask(activityManager)) {
                return GONE
            }

            val activityName = activityManager.appTasks[0].taskInfo.topActivity?.className ?: return GONE
            if (isForeground(activityManager)) {
                return FOREGROUND(activityName)
            }
            return BACKGROUND(activityName)
        }

        private fun isForeground(activityManager: ActivityManager): Boolean {
            val runningProcesses = activityManager.runningAppProcesses
            for (processInfo in runningProcesses) {
                for (activeProcess in processInfo.pkgList) {
                    if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                        return true
                    }
                }
            }
            return false
        }

        private fun existsAppTask(activityManager: ActivityManager): Boolean {
            return activityManager.appTasks.count() > 0
        }
    }
}

Amazon | ドロイドフォンフォン (GR) | 電話・携帯電話 | Amazon.co.jpホーム
ドロイドフォンフォン (GR)が電話・携帯電話ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

コメント

タイトルとURLをコピーしました