如何检测应用是否已安装,已安装则打开,未安装则跳转至Play Store
实现方案(Android平台)
1. 提前配置包可见性声明
从Android 11(API 30)开始,应用查询其他应用安装状态需要在AndroidManifest.xml中声明包查询权限,添加如下代码:
<queries> <package android:name="com.google.android.apps.fitness" /> </queries>
注:com.google.android.apps.fitness是Google Fit的官方固定包名
2. 核心逻辑实现
检测应用是否安装的工具方法
Kotlin版本:
fun isAppInstalled(context: Context, packageName: String): Boolean { return try { context.packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES) true } catch (e: PackageManager.NameNotFoundException) { false } }
Java版本:
private boolean isAppInstalled(Context context, String packageName) { try { context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { return false; } }
按钮点击事件逻辑
Kotlin版本:
yourButton.setOnClickListener { val fitPackage = "com.google.android.apps.fitness" if (isAppInstalled(this, fitPackage)) { // 已安装直接打开Google Fit val launchIntent = packageManager.getLaunchIntentForPackage(fitPackage) startActivity(launchIntent) } else { // 未安装跳转Play Store下载页 try { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$fitPackage"))) } catch (e: ActivityNotFoundException) { // 设备无Play Store时的兜底处理,可自定义逻辑 Toast.makeText(this, "未找到应用商店,请手动安装Google Fit", Toast.LENGTH_SHORT).show() } } }
Java写法逻辑与上述完全一致,仅语法存在差异。
注意事项
- 所有跳转逻辑已添加异常捕获,避免系统拦截跳转、无应用商店等场景下的崩溃问题
- 适配Android 12及以上版本无需额外添加跳转相关特殊权限,上述配置即可正常运行
内容的提问来源于stack exchange,提问作者Daniel Döbereiner
相关产品推荐
相关产品推荐

