获取隐式 Intent 打开的应用程序

Get app that implicit Intent opens

我正在使用一些遗留代码,相机是使用

打开的
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

这很好。但是,当相机应用程序打开时,一些代码是 运行(我不确定为什么),但如果相机应用程序在用户面前,它就会执行某些操作。 "top" 应用程序被检索,然后检查相机是否在顶部的代码是:

 boolean isCameraOnTop = topName.toLowerCase().indexOf("camera") != -1;

这在一段时间内运行良好,但我们一直在使用一种新设备进行测试,该设备的默认相机应用程序名称不是 "camera",而是其他名称(如果您必须知道,则为 "org.codeaurora.snapcam")。这种方法看起来很脆弱,因为任何设备都可以有任何默认的相机应用程序。

所以,我的问题是,当我通过 ACTION_IMAGE_CAPTURE 意图启动相机应用程序时,我如何才能找到实际打开的应用程序?

经过一番搜索,我找到了解决方案:

activity.getPackageManager().resolveActivity(cameraIntent, PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName;