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

Zen*_*aro 6 android url-scheme installed-applications

我已经为我的 Android 应用程序注册了一个 url 方案(假设 myapp://host)。

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

在 iOS 中,这很简单

[[UIApplication sharedApplication] canOpenUrl:@"myapp://"];
Run Code Online (Sandbox Code Playgroud)

Android 中有类似的吗?(简单的方法)

我想使用 url 方案进行检查。我知道如何使用包名称进行检查,但我也不知道如何从 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;
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

注意:这是针对 iOS 的同一问题的 Android 版本: 以编程方式检测应用程序是否安装在 iPhone 上

nan*_*esh 3

如果您知道如何启动应用程序,则创建启动应用程序的意图,然后调用 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
Run Code Online (Sandbox Code Playgroud)

  • 这通常会起作用,但是可能有多个活动可以处理 URL,因此最好实际检查包名称(“ResolveInfo.activityInfo.packageName”)。由于供应商为避免(像往常一样,有问题的)Applet 专利而做出的一些改变,情况变得更加复杂。更多详细信息请参见:http://commonsware.com/blog/2012/07/24/linkify-problem-detection-mitigation.html (3认同)