从活动中调用应用程序

时间:2014-02-21 14:06:19

标签: android-intent apk android

我知道有很多类似的帖子,比如

这:Launch an application from another application on Android

并且:Launch Activity from another Application Android

但他们不满足我的问题。

背景

我正在开发一个应用程序,我需要调用已安装在手机中的应用程序。例如Astro Filemanager

我的问题是:

如何从我的Activity中调用手机中安装的应用程序,请记住我没有包名,我只有应用程序名称。

我可以实现吗?

If yes then how?

if not then why?

我知道我可以使用软件包名称调用另一个应用程序,但在我的情况下,我没有软件包名称,我只有应用程序名称可用

另一种情景

我可以在项目文件夹中保存应用程序的.apk文件,然后从那里调用apk吗?

2 个答案:

答案 0 :(得分:2)

我写了一个方法,它返回所有已安装的应用程序及其包和显示名称。

public static List<PInfo> getInstalledApps(Context context) {
   List<PInfo> result = new ArrayList<PInfo>();        
   List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(0);

    for(int i=0;i<packs.size();i++) {           
       PackageInfo p = packs.get(i);
       PInfo fileInfo = new PInfo();
       fileInfo.appname =  p.applicationInfo.loadLabel(context.getPackageManager()).toString();
       fileInfo.pname = p.packageName;
       fileInfo.versionName = p.versionName;
       fileInfo.versionCode = p.versionCode;
       fileInfo.icon = p.applicationInfo.loadIcon(context.getPackageManager());
       result.add(fileInfo);
    }   
    return result;
}

也许您可以通过显示名称搜索包名称,并使用该包名创建一个意图。

答案 1 :(得分:0)

如果您需要启动Astro文件管理器来选择文件,那么您可以启动

final Intent getContent = new Intent(Intent.ACTION_GET_CONTENT);
//check if there are any app to handle. If not, you must not call startActivity.
if (!getPackageManager.queryIntentActivities(getContent, 0).isEmpty()) {
    startActivity(new Intent(Intent.ACTION_GET_CONTENT));
}

请注意,如果有一个具有GET_CONTENt默认值的应用,您将看不到选择器。您可以通过创建选择器意图强制选择器

startActivity(Intent.createChooser(new Intent(Intent.ACTION_GET_CONTENT), "Pick an app"));

不要忘记检查queryIntentActivities是否为空b

如果您只想明确启动Astro,则必须使用它的包名称

startActivity(getPackageManager().getLaunchIntentForPackage(ASTRO_PACKAGE));

可以找到ASTRO_PACKAGE

adb shell pm list packages astro

其中

  • adb shell 在adb shell中启动下一个命令
  • pm 启动包管理器应用
  • 列出包包管理器的命令
  • astro 列表包命令的过滤器参数