1、如果一个应用中只有一个启动Activity可用以下方式启动
Intent intent = mView.getPackageManager().getLaunchIntentForPackage(aInfo.getPkgName());
if (intent != null) {
startActivity(intent);
2、如果一个应用中有多个启动Activity则要用下面的方式来启动
首先获取应用的包中所有的启动Activity
Intent intent1 = new Intent(Intent.ACTION_MAIN);
intent1.addCategory(Intent.CATEGORY_LAUNCHER);
intent1.setPackage(aInfo.getPkgName());
List<ResolveInfo> list = mView.getPackageManager().queryIntentActivities(intent1, PackageManager.GET_ACTIVITIES);
应为它们的包可能会相同所以判断它的应用名来区分到底启动哪个Activity
for (ResolveInfo resolveInfo : list) {
if (aInfo.getAppLabel().equals(resolveInfo.loadLabel(mView.getPackageManager()).toString())) {
startNewActivity(mView, resolveInfo, aInfo.getPkgName());
}
}
private void startNewActivity(Context context, ResolveInfo info, String pkgName)
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(pkgName, info.activityInfo.name);
intent.setComponent(cn);
context.startActivity(intent);
}
附:获取android系统中所有应用
public List<AppInfo> getAllApps()
{
List<AppInfo> appInfos = new ArrayList<AppInfo>();
List<PackageInfo> packages = mPkgManager
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo pkginfo : packages) {
String pkgName = pkginfo.packageName;
Intent intent1 = new Intent(Intent.ACTION_MAIN);
intent1.addCategory(Intent.CATEGORY_LAUNCHER);
intent1.setPackage(pkgName);
List<ResolveInfo> list = mPkgManager.queryIntentActivities(intent1, PackageManager.GET_ACTIVITIES);
for (ResolveInfo resolveInfo: list) {
String appLabel = resolveInfo.loadLabel(mPkgManager).toString();
Drawable drawable = getAppIcon(resolveInfo);
AppInfo info = new AppInfo(drawable, appLabel, pkgName);
appInfos.add(info);
}
}
Log.d(TAG, "all app sizes---:" + appInfos.size());
return appInfos;
}
AppInfo为自定义类包含了包名、应用名,图标