gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:10:57 25 4
gpt4 key购买 nike

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

我的问题是:有没有办法通过“标签名称”在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com