【发布时间】: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