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

标签 android

给定应用程序的包 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/

相关文章:

android - 如何将我的 Android 手机屏幕投影到我的电脑显示器上?

android - 共享首选项不保存

android - 在android中创建持久搜索栏

java - 有没有办法更改 Android 上的 Google map 背景?

android - 如何在android应用程序中登录一次?

android - 在 android 中将视频分享到 facebook?

Android NDK 无法打开任何文件

Android ListView 单击上下文菜单

java - 我可以获得我的程序剩余多少内存吗?

java - 如何设置Android底部工作表高度match_parent?