给定应用程序的包 ID,我如何判断它是否来自未知来源(即用户必须在安装 APK 之前启用“允许不受信任的来源”)?
最佳答案
Android: How to determine if an app came from unknown source?
我认为没有办法确定 .apk 文件是否来自未知来源。 Android API 无法提供解决方案来实现您的目标。
所有能做的就是判断应用程序是否是系统:
if ((info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
// its system application
}
else {
// its non-system application
// here you can assume that application can be from unknown source
}
更新:
存在一种可能的解决方案,但我认为它不是很有效和可靠。想法是在 Google Play 上发出经典的 HTTPGet 请求,例如:
https://play.google.com/store/apps/details?id=com.example.foo
然后检查返回的内容。如果返回的头部包含这样的内容:
<title>Not Found</title>
在这里您可以假设应用程序来自未知来源,但这种方式不正确且不可靠,因为:
- 您无权访问网络
- 请求可以返回其他内容或不同的格式(这就是你 不能假设)
- 它消耗字节(例如移动数据可能有问题)
请求的伪代码如下所示:
String url = Const.MARKET + packageName;
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = null;
...
HttpGet request = new HttpGet(url);
response = httpClient.execute(request);
HttpEntity content = response.getEntity();
String content = EntityUtils.toString(content);
if (content != null && content.contains("<title>Not Found</title>")) {
// application is from unknown source
}
注意:您可以从 PackageManager 中检索应用程序包。
关于Android:如何确定应用程序是否来自未知来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20228490/