java - 通过标签名称和不知道的包名称在 Android 中打开应用程序。

标签 java android gmail lowercase

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

我的问题是:有没有办法通过“标签名称”在 Android 中打开应用程序,而另一方面,包名称是“知道"?

我以前这样做的方法是创建两个 ArrayList 并在每个 ArrayList 中存储包名和标签名,然后,在将标签名和包名转换为小写后,我将它们与包名进行匹配,以便相同letters 看看是否有匹配,如果匹配,然后我通过获取它的包名称来启动应用程序。 我遇到的问题是,根据应用程序开发人员写的包名,包名有时没有或与标签名中的相同名称不匹配。 例如:如果我想打开 gmail ,根据我的方法我不能,因为包名称是 com.google.android.gm 并且标签名称是 < em>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) {

    }
}

最佳答案

感谢所有回复,我通过@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) {

    }
}

关于java - 通过标签名称和不知道的包名称在 Android 中打开应用程序。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883246/

相关文章:

java - 在 Spring RESTful Web 服务中接受 json 调用以及 XML

java - 将 jetty 与 Repast simphony 一起使用时出错

java - Java 中类的优化思路

oauth-2.0 - phpmailer 的 Oauth2 gmail SMTP 身份验证错误

Javascript 确定用户在页面上的位置

java - Jung,大顶点重叠的布局和图形出现在奇怪的位置

android - 在gradle同步中突然出现错误-构建工具版本27.0.1和支持版本27.0.1等在android studio项目中找不到

javascript - 本网站需要在您的浏览器中启用 Javascript

java - 在 Android 上使用来自 libGDX 的 SQLite

gmail - Gmail 如何检测鼠标移动?