【问题标题】:Detect an application is installed or not?检测应用程序是否安装?
【发布时间】:2010-10-13 10:15:26
【问题描述】:

我有一个应用程序为电话上的自定义 URI 注册处理程序。我可以通过从我的手机网页链接到“myapp://act/launch”来启动应用程序。这仅在我的应用程序安装在设备上时才有效。 我想要做的是检测浏览器是否支持 URI 方案,然后如果找不到 URI 方案的处理程序,则提示我自己的消息“请下载应用程序等...”。

有没有一种方法可以从 Web 浏览器检测或查找手机上的 URL 方案处理程序列表?

【问题讨论】:

标签: android


【解决方案1】:

来自Android How-to's

如果您需要知道用户设备上是否安装了特定应用,您可以使用 PackageManager。从 Context 类(例如 Activity 或 Service)中,您可以调用 getPackageManager()。这为您提供了多种方法,其中之一是 getPackageInfo()。以下是您可能会使用的方法。你可以这样称呼它:

isAppInstalled("com.simexusa.campusmaps_full");

private boolean isAppInstalled(String packageName) {
    PackageManager pm = getPackageManager();
    boolean installed = false;
    try {
       pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
       installed = true;
    } catch (PackageManager.NameNotFoundException e) {
       installed = false;
    }
    return installed;
}

【讨论】:

  • 无论如何:“uri”是该方法的正确参数名称吗? packageName 会更好吗?
  • @GlennBech:是的,packageNameuri 更具描述性
  • 但这个答案不适用于上述问题。它更像是“确定是否从另一个应用程序安装特定应用程序”(但不是从 Web 浏览器)
  • 同意上面的说法,而且他特别询问了 URI 模式。这就是我要找的。有没有办法确定手机上是否存在 URI 架构,或者是否必须使用包名?
【解决方案2】:
  1. 如果应用程序不可用,您需要创建用户登陆的网页 安装。说http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html

  2. 应用需要在清单 XML 文件主机 www.yourcompany.com 中注册, 架构“http”和应用程序的路径参数未安装登录页面 清单意图过滤器:

    <!-- These intents are used to launch the app from the web page-->
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http"
            android:host="www.yourcompany.com"
            android:path="/android/android_app_is_not_installed_landing_page.html" 
      />
    </intent-filter>
    
  3. 现在在调用您的应用程序的网页中,您指定完整链接到 android_app_is_not_installed_landing_page.html 后跟任何内容 您要传递给应用的参数:

http://www.yourcompany.com/android/ android_app_is_not_installed_landing_page.html? '>点击这里启动 该应用程序(如果已安装)

如果安装了应用程序,它将启动并通过整个 http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html?' 为了它需要解析,提​​取 做任何事情 应该做的。

如果未安装该应用程序,则将打开 Android Web 浏览器 “未安装 Android 应用”登陆页面 http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.htmlo .该页面应通知用户安装应用程序并提供 从 Android 市场安装它的链接。

在这里找到这篇文章:https://groups.google.com/forum/m/?fromgroups#!topic/android-developers/RGLHkGUpRoA

【讨论】:

  • 那么为什么要投反对票,因为它实际上回答了他提出的问题?
【解决方案3】:

在我的自定义 Helper.java

public static boolean isPackageInstalled(Context context, String packageName)
{
    PackageManager pm = context.getPackageManager();
    try {
        pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        Log.d("Tag",packageName + " not installed");
    }
    return false;
}

调用它

Helper.isPackageInstalled(yourActivity.this,"app_package_name")

【讨论】:

    【解决方案4】:

    虽然接受的答案是正确的,但是那些正在寻找 Kotlin 解决方案的人可以使用这种方法,

    在这里我写了一篇文章。 Check If Application is Installed in Android Kotlin

    fun isAppInstalled(packageName: String, context: Context): Boolean {
            return try {
                val packageManager = context.packageManager
                packageManager.getPackageInfo(packageName, 0)
                true
            } catch (e: PackageManager.NameNotFoundException) {
                false
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多