我有一个应用程序,接受来自其他应用程序的某些数据。其他应用程序通常会检查我的应用程序是否已经安装。由于某种原因,其他一些应用程序开发人员会做一些复杂的检查,有时会失败。这经常会导致我收到不好的评论,因为这些应用告诉用户安装我的应用程序,而他们确实安装了,但它一直告诉他们,因为它找不到我的应用程序。
因此,我对其中一个应用程序进行了分解,我想我找到了问题所在。他们得到了一个安装了如下应用的列表:
getPackageManager().getInstalledApplications(128)
128
似乎是PackageManager.GET_META_DATA
,但我不知道这意味着什么,为什么我的应用程序没有出现在列表中?
我在这篇文章中读到过Android PackageManager can only detect system apps on physical devices,它可能与Android11 https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9上的包可见性有关,但是我尝试添加了<queries>
元素,这一点也没有帮助。这是他们需要添加的东西还是我需要添加的东西?
编辑:弄清楚了<queries>
是如何工作的。搜索我的应用程序一定有它。所以这对我没什么帮助。有什么方法可以让我的应用在查询包时出现在这些应用程序中吗?
发布于 2022-07-16 19:57:17
我不知道那是什么意思
这意味着返回的数据将包含清单中<meta-data>
元素的内容。
,为什么我的应用程序没有出现在列表中?
这个问题不太可能直接与GET_META_DATA
有关。
然而,IIRC,这些PackageManager
方法是容量有限的,如果有太多或它们太大的话,可能不会返回所有的结果。在这方面,GET_META_DATA
将增加响应的大小,并可能导致该响应在列表中的元素方面不完整。如果你的应用程序因此被错过,那么你就会看到你的行为。
真正的问题是,他们一开始就调用getInstalledApplications()
。GET_META_DATA
只会让情况变得更糟。
由于某种原因,其他一些应用程序开发人员会做一些复杂的检查,有时会失败。
考虑提供一个处理检查的SDK,使用比“获取所有已安装应用程序及其<meta-data>
内容的列表”更集中的技术。根据应用程序的性质,SDK还可能包含检查应用程序签名以确定其与预期值匹配的代码,因此其他应用程序不会尝试与应用程序的冒牌货或破解版本进行通信。
https://stackoverflow.com/questions/73007157
复制相似问题