检测是否安装了应用程序?

时间:2010-10-13 10:15:26

标签: android

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

有没有办法可以从网络浏览器中检测或找到电话上的URL方案处理程序列表?

4 个答案:

答案 0 :(得分:62)

来自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;
}

答案 1 :(得分:14)

  1. 如果应用不是,您需要创建用户登陆的网页 安装。说http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html

  2. 该应用需要在清单XML文件主机www.yourcompany.com中注册, schema“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紧随其后 要传递给应用程序的参数:

  4. http://www.yourcompany.com/android/ android_app_is_not_installed_landing_page.html? '&gt;点击此处启动 应用程序是否已安装

    如果安装了应用程序,它将启动并传递完整 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.html o 。该页面应该通知用户安装应用程序并提供 链接从Android marketplace安装。

    在此处写到:https://groups.google.com/forum/m/?fromgroups#!topic/android-developers/RGLHkGUpRoA

答案 2 :(得分:0)

在我的自定义 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")

答案 3 :(得分:0)

尽管公认的答案是正确的,但是正在寻找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
        }
    }