우선 Google에서 여러 번 내 질문을 검색하지만 원하는 내용을 찾지 못했습니다.안드로이드에서 라벨 이름과 알 수없는 패키지 이름으로 애플리케이션을 엽니 다.
내 질문은 : 반면에 패키지 이름은 "레이블 이름" "이을 알고"안드로이드에서 응용 프로그램을 열 수있는 방법이 있습니까?
필자가 사용했던 방식은 두 개의 ArrayList를 만들고 각각에 패키지 이름과 레이블 이름을 저장 한 다음 레이블 이름을 소문자로 변환 한 다음 패키지 이름으로 레이블 이름과 일치시키는 방법으로 동일한 문자가 일치하는 경우 보려면, 일치하는 경우, 다음 나는 그 패키지 이름을 가져 응용 프로그램을 시작합니다. 내가 직면 한 문제는 패키지 이름에 패키지 이름을 쓰던 응용 프로그램 개발자를 기반으로 레이블 이름에 같은 이름이 없거나 일치하지 않는 경우가 있습니다. 예를 들어 : I 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) {
}
}
왜 패키지 이름과 레이블을 붙잡고있는 객체를 포함하는 * 하나 *'ArrayList'를 사용합니까? – CommonsWare
이 조언에 대해 @CommonsWare에게 감사드립니다. 제대로 작동 했나요? :) –