判断Activity是否在运行、应用是否在前台、是否安装

    xiaoxiao2025-11-20  10

    **

    前言:

    仅为总结,以备不时之需。

    ** **


    一、判断Activity是否在运行

    ** 注意:am.getRunningTasks(1)可以获得当前运行的task数量,设置为1则可以判断当前Activity是否正在前台运行,如果设置task数量很大时可以判断Activity是否已经已经finish

    /** * 判断某个界面是否在前台 * * @param context * @param className 某个界面名称 */ public static boolean isForeground(Context context, String className) { if (context == null || TextUtils.isEmpty(className)) { return false; } ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1); if (list != null && list.size() > 0) { ComponentName cpn = list.get(0).topActivity; if (className.equals(cpn.getClassName())) { return true; } } return false; } }

    **

    二、判断App是否正在运行

    **

    public boolean isAppOnForeground() { ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); String packageName = mContext.getPackageName(); List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager .getRunningAppProcesses(); if (appProcesses == null) return false; for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { // The name of the process that this object is associated with. if (appProcess.processName.equals(packageName) && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { return true; } } return false; }

    **

    三、判断应用是否安装

    ** 共有两种方法:

    方法一:利用uri判断App是否安装

    private boolean isAppInstalled(Context context, String uri) { PackageManager pm = context.getPackageManager(); boolean installed = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); installed = true; } catch (PackageManager.NameNotFoundException e) { installed = false; } return installed; }

    方法二:利用包名判断App是否安装

    public boolean isAppInstalled(Context context, String packageName) { final PackageManager packageManager = context.getPackageManager(); List<PackageInfo> pinfo = packageManager.getInstalledPackages(0); List<String> pName = new ArrayList<String>(); if (pinfo != null) { for (int i = 0; i < pinfo.size(); i++) { String pn = pinfo.get(i).packageName; pName.add(pn); } } return pName.contains(packageName); } 如果想通过这个方法来判断并跳转至其他应用,可以利用Intent和ComponentName来进行跳转。 注意:这个包名是假的,需要传真实的应用的包名 //已安装,打开程序, if(isAppInstalled(this, "com.android.demo")){ Intent i = new Intent(); ComponentName cn = new ComponentName("com.android.demo", "com.android.demo.MainActivity"); i.setComponent(cn); startActivityForResult(i, RESULT_OK); } //未安装,跳转至market下载该程序 else { Uri uri = Uri.parse("market://details?id=com.android.demo");//id为包名 Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); }
    转载请注明原文地址: https://ju.6miu.com/read-1304384.html
    最新回复(0)