以编程方式检测Android上是否安装了应用程序

时间:2012-09-05 02:54:21

标签: android url-scheme installed-applications

我已经为我的Android应用注册了一个url方案(让我们说myapp:// host)。

在我的其他应用程序上,我可以使用Intent启动该应用程序,但如何在不启动它的情况下检查是否安装了第一个应用程序?

在iOS中,它就像

一样简单
[[UIApplication sharedApplication] canOpenUrl:@"myapp://"];

在Android中是否有同等效力? (简单方法)

我想查看使用网址方案。我知道如何使用包名来检查,但我不知道如何从PackageInfo获取url方案......(更难的方式)

    PackageManager pm = m_cContext.getPackageManager();
    boolean installed = false;
    try {
        @SuppressWarnings("unused")
        PackageInfo pInfo = pm.getPackageInfo(szPackageName, PackageManager.GET_ACTIVITIES);
        installed = true;
    } 
    catch (PackageManager.NameNotFoundException e) {
        installed = false;
    }

提前致谢!

注意:这是针对iOS的同一问题的Android版本: Detecting programmatically whether an app is installed on iPhone

2 个答案:

答案 0 :(得分:2)

如果您知道如何启动应用,请创建启动应用的意图,然后调用queryIntentActivities

 Intent intent = //your app launching intent goes here
 PackageManager packageManager = mContext.getPackageManager();
 List<ResolveInfo> resolvedActivities = packageManager.queryIntentActivities(intent,0);
 if(resolvedActivities.size() >0)
     \\present

答案 1 :(得分:0)

我在静态方法中使用 PackageManager 类中的 queryIntentActivities

public static boolean canOpenIntent(Context context, Intent intent)
{
    boolean canOpenUrl = false;
    PackageManager    packageManager     = context.getPackageManager();
    List<ResolveInfo> resolvedActivities = packageManager.queryIntentActivities(intent, 0);
    if(resolvedActivities.size() > 0)
        canOpenUrl = true;
    return canOpenUrl;
}