2016年8月21日日曜日

アプリが前面(フォアグランド)にいるかを知る

アプリが前面(フォアグランド)にいるかを知りたい!


ActivityLifecycleCallbackを使用

ApplicationクラスでActivityLifecycleCallbackを受けて、onStopとonPauseでカウントする方法です。
最も一般的方法。


ActivityManager#getRunningAppProcessを使用

Lollipop以降は自アプリとホームアプリの情報しか取得出来なくなりましたが、何かの理由でホームアプリの状態を知りたい場合に有効です。

具体的にはRunningAppProcessInfo#importanceの値をチェックします。
値がIMPORTANCE_FOREGROUNDだった場合がフォアグランドにいる場合となりますが、注意しなければいけないのが、フォアグランドの他アプリからServiceがbindされている場合もIMPORTANCE_FOREGROUNDになるため(OSから見れば同レベルに重要って事かな?)、importanceReasonCodeのチェックも必要です。


UsageStatsManagerを使用

全てのアプリの状態を知りたい場合、Lollipop以降はこれを使用する必要がandroid.permission.PACKAGE_USAGE_STATSをuses宣言する必要があるかつ、ユーザ操作でセキュリティ設定(使用履歴にアクセスするアプリ)を有効にして貰う必要があり、とても使い勝手が悪いです。

----------
最後に確認したOSバージョンはAndroid 6.0です

AndroidはGoogle Inc.の商標または登録商標です


0 件のコメント:

コメントを投稿