我有一个应用程序在电话上注册自定义URI的处理程序。我可以通过手机网页链接到“myapp:// act / launch”来启动应用程序。仅当我的应用程序安装在设备上时,此方法才有效。 我想要做的是检测浏览器是否支持URI Scheme,然后如果找不到URI方案的处理程序,则提示我自己的消息“请下载应用程序等...”。
有没有办法可以从网络浏览器中检测或找到电话上的URL方案处理程序列表?
答案 0 :(得分:62)
如果您需要知道用户设备上是否安装了特定应用程序,则可以使用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)
如果应用不是,您需要创建用户登陆的网页 安装。说http://www.yourcompany.com/android/android_app_is_not_installed_landing_page.html
该应用需要在清单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>
现在,在调用您的应用的网页中,您指定了完整链接 android_app_is_not_installed_landing_page.html紧随其后 要传递给应用程序的参数:
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
}
}