Android 如何仅在手机上安装了与之相关的apk时显示菜单选项

Android 如何仅在手机上安装了与之相关的apk时显示菜单选项,android,apk,android-package-managers,Android,Apk,Android Package Managers,假设我有一个名为“Display”的菜单选项,我的应用程序com.android.Display正在执行显示图片的任务。现在,如果设备上没有安装apk com.android.Display,则菜单选项“Display”会出现,但没有用。因此,我希望只有在设备上安装此apk时,才会出现“Display”菜单选项。 有没有办法在Android操作系统上实现这一点?此特定解决方案已启用 如果您需要知道某个特定的应用程序是否安装在 在用户的设备上,可以使用PackageManager。来自上下文类 (

假设我有一个名为“Display”的菜单选项,我的应用程序com.android.Display正在执行显示图片的任务。现在,如果设备上没有安装apk com.android.Display,则菜单选项“Display”会出现,但没有用。因此,我希望只有在设备上安装此apk时,才会出现“Display”菜单选项。
有没有办法在Android操作系统上实现这一点?

此特定解决方案已启用

如果您需要知道某个特定的应用程序是否安装在 在用户的设备上,可以使用PackageManager。来自上下文类 (例如,活动或服务)您可以调用getPackageManager()。 这为您提供了多种方法,其中一种是getPackageInfo()。 下面是您可能使用的方法。你可以这样称呼它:


有几种方法可以做到这一点

第一种可能也是最好的方法是在所有情况下都显示该选项。如果另一个APK没有安装,当您试图通过发送意向来激活它时,Android将抛出异常。只需捕获此异常,并提供将用户引导到市场,在那里他们可以安装缺少的应用程序。通过这种方式,用户知道他们有一个额外功能的选项,并且可以相当容易地安装它

如果您坚持您原来的路线,我不会采用上述解决方案,因为可能有多个APK提供相同的功能。如果您检查特定的APK,那么用户可能有另一个处理相同意图的APK,并且您没有向他们提供该功能,尽管它受到支持

相反,我将检查特定意图是否有处理程序。您可以找到执行此操作的代码

沙查尔

isAppInstalled("com.simexusa.campusmaps_full");

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