加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Android判断当前应用程序状态是在前台还是后台

发布时间:2020-12-14 23:27:21 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 public?static?boolean?isBackground(Context?context)?{????????Log.d("Nat:?isBackground.packageName1",?context.getPackageName());????????Activ

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

public?static?boolean?isBackground(Context?context)?{

????????Log.d("Nat:?isBackground.packageName1",?context.getPackageName());

????????ActivityManager?activityManager?=?(ActivityManager)?context.getSystemService(Context.ACTIVITY_SERVICE);

????????List<ActivityManager.RunningAppProcessInfo>?appProcesses?=?activityManager.getRunningAppProcesses();

????????for?(ActivityManager.RunningAppProcessInfo?appProcess?:?appProcesses)?{

????????????Log.d("Nat:?isBackground.processName",?appProcess.processName);

????????????if?(appProcess.processName.equals(context.getPackageName()))?{

????????????????Log.d("Nat:?isBackground.importance",?String.valueOf(appProcess.importance));

????????????????if?(appProcess.importance?==?ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND)?{

????????????????????Log.i("后台",?appProcess.processName);

????????????????????return?true;

????????????????}else{

????????????????????Log.i("前台",?appProcess.processName);

????????????????????return?false;

????????????????}

????????????}

????????}

????????return?false;

????}
class?ForegroundCheckTask?extends?AsyncTask<Context,?Void,?Boolean>?{
????????@Override
????????protected?Boolean?doInBackground(Context...?params)?{
????????????final?Context?context?=?params[0].getApplicationContext();
????????????return?isAppOnForeground(context);
????????}
????????private?boolean?isAppOnForeground(Context?context)?{
????????????ActivityManager?activityManager?=?(ActivityManager)?context.getSystemService(Context.ACTIVITY_SERVICE);
????????????List<ActivityManager.RunningAppProcessInfo>?appProcesses?=?activityManager.getRunningAppProcesses();
????????????if?(appProcesses?==?null)?{
????????????????return?false;
????????????}
????????????final?String?packageName?=?context.getPackageName();
????????????Log.d("Nat:?isAppOnForeground.packageName",?context.getPackageName());
????????????for?(ActivityManager.RunningAppProcessInfo?appProcess?:?appProcesses)?{
????????????????Log.d("Nat:?isAppOnForeground.processName",?appProcess.processName);
????????????????if?(appProcess.importance?==?ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND?&&?appProcess.processName.equals(packageName))?{
????????????????????return?true;
????????????????}
????????????}
????????????return?false;
????????}
????}
public?static?boolean?isForeground(Context?context)?{
????????Log.d("Nat:?isBackground.checkPackageName",?context.getPackageName());
????????ActivityManager?am??=?(ActivityManager)?context.getSystemService(Context.ACTIVITY_SERVICE);
????????List<ActivityManager.RunningTaskInfo>?runningTasks?=?am.getRunningTasks(1);
????????if?(runningTasks?!=?null){
????????????//?The?first?in?the?list?of?RunningTasks?is?always?the?foreground?task.
????????????ActivityManager.RunningTaskInfo?foregroundTaskInfo?=?runningTasks.get(0);
????????????String?foregroundTaskPackageName?=?foregroundTaskInfo?.topActivity.getPackageName();
????????????Log.d("Nat:?isBackground.foregroundTaskPackageName",?foregroundTaskPackageName);
????????????if?(context.getPackageName().equals(foregroundTaskPackageName)){
????????????????return?true;
????????????}
//????????????PackageManager?pm?=?context.getPackageManager();
//????????????PackageInfo?foregroundAppPackageInfo?=?pm.getPackageInfo(foregroundTaskPackageName,?0);
//????????????String?foregroundTaskAppName?=?foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
????????}
????????return?false;
????}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读