Android:如何确定某个应用是否来自未知来源?

时间:2013-11-26 21:38:21

标签: android

考虑到应用程序的包ID,如何判断它是否来自未知来源(即用户在安装APK之前必须启用“允许不受信任的来源”)?

3 个答案:

答案 0 :(得分:2)

  

Android:如何确定应用是否来自未知来源?

我认为没有办法确定.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中检索的应用程序包。

答案 1 :(得分:0)

没有办法做出这个决定(我至少知道)。此设置的区别在于.APK是从Google Play下载的(受信任)或通过其他应用程序安装或从网上下载(不受信任)。

答案 2 :(得分:0)

据我所知,这取决于该应用的创建者是否已使用Google Play开发者密钥与APK签约。您无法从包名称中检索它。