Android开发笔记: 判断Activity是否在线

1 获取已经安装的应用程序

/**
     * 获取已安装应用信息
     *
     * @param includeSystemApps true:包含系统应用 false:不包含系统应用
     */
    @SuppressWarnings("static-access")
    private void getAppInfo(boolean includeSystemApps) {

        PackageManager pm = this.getPackageManager();
        appClassList.clear();
        List<PackageInfo> packageInfos = this.getPackageManager().getInstalledPackages(0);
        List<AppClass> sysApps = new ArrayList<>();
        for (PackageInfo packageInfo : packageInfos) {
            
            //过滤掉当前app
            if (packageInfo.packageName.equals("startapp.cuanbo.startoneapp")) {
                continue;
            }

            AppClass appInfo = new AppClass();
            // 获得应用名
            appInfo.Name = pm.getApplicationLabel(packageInfo.applicationInfo).toString();
            // 获得应用包名
            appInfo.PageName = packageInfo.packageName;
            appInfo.Ico = packageInfo.applicationInfo.loadIcon(pm);
            appInfo.ClassName = packageInfo.getClass().getName();
            AppListStr += appInfo.Name + "-" + appInfo.PageName + ":";

            //判断是否为非系统预装的应用  (大于0为系统预装应用,小于等于0为非系统应用)
            if (!includeSystemApps) {
                if ((packageInfo.applicationInfo.flags & packageInfo.applicationInfo.FLAG_SYSTEM) > 0) {
                    sysApps.add(appInfo);
                    continue;
                }
            } 
            appClassList.add(appInfo); 
        }

        for (AppClass ac : sysApps) {
            //将系统医用添加进去,我把系统应用显示在最后面
            appClassList.add(ac);
        }
    }

2 AppClass类

public class AppClass {
    public String Name ="";
    public String PageName="";
    public String ClassName ="";
    public String ProcessName="";
    public boolean IsActivity = true;
    public int UID = 0;
    public Drawable Ico = null;
}

3 根据包名,判断应用是否存在

  public boolean checkApplication(String packageName) {
        if (packageName == null || "".equals(packageName)) {
            return false;
        }
        boolean bo = true;
        try {

            Intent intent = new Intent();
            AppClass ap = getAppByPageName(packageName);
            intent.setClassName(packageName,ap.ClassName);

            if (intent.resolveActivity(getPackageManager()) == null){
            
                ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
               bo = false;
            }

            if (getPackageManager().resolveActivity(intent, 0) == null) {
                // 说明系统中不存在这个activity
                bo = false;
            }

            List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
            if (list.size() == 0) {
                bo = false;
            }


        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return bo;
    }

   

 public List<AppClass> appClassList = new ArrayList<>();
 public AppClass getAppByPageName(String pageName) {
        AppClass appClass = new AppClass();
        for (int i = 0; i < appClassList.size(); i++) {
            if (appClassList.get(i).PageName.equals(pageName)) {
                appClass = appClassList.get(i);
                break;
            }
        }
        return appClass;
    }











猜你喜欢

转载自blog.csdn.net/taoerit/article/details/79868461