【问题标题】:Open Application in Android by label name, and unknowing package name.通过标签名称和未知的包名称在 Android 中打开应用程序。
【发布时间】:2014-05-17 23:22:42
【问题描述】:

首先,我在 Google 中多次搜索我的问题,但没有找到我想要的。

我的问题是: 有没有办法通过“label name”在 Android 中打开应用程序,而包名是“knowing" ?

我以前这样做的方法是创建两个 ArrayList 并在每个中存储包名称和标签名称,然后,我将标签名称与包名称转换为小写后匹配,以便相同字母来查看是否有匹配,如果匹配,然后我通过获取它的包名来启动应用程序。 我遇到的问题是,根据应用程序开发人员写的包名,包名有时在标签名中没有或不匹配相同的名称。 例如:如果我想打开 gmail ,根据我的方法我不能,因为包名称是 com.google.android.gm 并且标签名称是 gmail,我向延期道歉,在此先感谢。

我的代码:

private void getAllApps() {
    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(mainIntent, 0);
    for (ResolveInfo resolveInfo : activities) {
        appsName.add(resolveInfo.loadLabel(getPackageManager()).toString()
                .toLowerCase());
        pkgsName.add(resolveInfo.activityInfo.packageName.toString());
    }
}

private void openApplication(String appName) {

    String packageName = null, appNameLowerCase = null, pkgNameLowerCase = null;

    // matching the package name with label name
    if (appsName.contains(appName)) {
        appNameLowerCase = appName.trim().replace(" ", "");
        for (int i = 0; i < pkgsName.size(); i++) {
            pkgNameLowerCase = pkgsName.get(i).trim().toLowerCase();
            if (pkgNameLowerCase
                    .matches("(.*)" + appNameLowerCase + "(.*)")) {
                packageName = pkgsName.get(i);
                break;
            }
        }
    }

    // to launch the application
    Intent i;
    PackageManager manager = getPackageManager();
    try {
        i = manager.getLaunchIntentForPackage(packageName);
        if (i == null)
            throw new PackageManager.NameNotFoundException();
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        startActivity(i);
    } catch (PackageManager.NameNotFoundException e) {

    }
}

【问题讨论】:

  • 为什么不使用 one ArrayList,包含一个包含包名和标签的对象?
  • 感谢@CommonsWare 的建议,我做得很好。 :)

标签: java android gmail lowercase


【解决方案1】:

感谢所有回复,我通过@CommonsWare 解决方案解决了它,它可以正常工作:

 class Applications {
    private String packageName;
    private String labelName;
 }

 private void getAllApps() {
    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(mainIntent, 0);
    for (ResolveInfo resolveInfo : activities) {
        Applications applications = new Applications();
        applications.labelName = resolveInfo.loadLabel(getPackageManager())
                .toString().toLowerCase();
        applications.packageName = resolveInfo.activityInfo.packageName
                .toString();
        applicationsArrayList.add(applications);
    }
}

private void openApplication(String appName) {

    String packageName = null;

    // matching the package name with label name
    for (int i = 0; i < applicationsArrayList.size(); i++) {
        if (applicationsArrayList.get(i).labelName.trim().equals(
                appName.trim())) {
            packageName = applicationsArrayList.get(i).packageName;
            break;
        }
    }

    // to launch the application
    Intent i;
    PackageManager manager = getPackageManager();
    try {
        i = manager.getLaunchIntentForPackage(packageName);
        if (i == null)
            throw new PackageManager.NameNotFoundException();
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        startActivity(i);
    } catch (PackageManager.NameNotFoundException e) {

    }
}

【讨论】:

    【解决方案2】:

    试试这个

    public List<ApplicationInfo> getApplicationList(Context con){
        PackageManager p = con.getPackageManager(); 
        List<ApplicationInfo> info = p.getInstalledApplications(0);
        String example = info.get(0).packageName.toString();
        return info;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2017-04-24
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      相关资源
      最近更新 更多