前景
抓住两个点,有效的 和 APK下载。
正常的判断一个url是否有效
解决这个的思路很简单,就是判断建立的HttpURLConnection的返回的HttpCode是否为200。
url带有重定向的情况
如果你提供的网址存在了一个重定向的情况,比如 ,服务器为了安全起见 ,买了SSL证书,以前的http请全部都要走https,这之后肯定就要把http上面做一个https的映射。
实例说明:在浏览器中发送了一个获取apk的资源
url是否是一个有效apk的下载地址
/**
* 判断地址是否有效的apk下载地址
* @param apkUrl apk下载的地址
* @return 是否可下载
*/
public static boolean urlIsValidForApk(String apkUrl) {
try {
URL url = new URL(apkUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int reponseCode = connection.getResponseCode();
String contentType = connection.getContentType();
if (reponseCode == HttpStatus.OK.value() && (MediaType.APPLICATION_OCTET_STREAM.toString().equals(contentType)
|| "application/vnd.android.package-archive".equals(contentType))) {
return true;
}
//重定向
if (HttpStatus.FOUND.value() == reponseCode ||
HttpStatus.MOVED_PERMANENTLY.value() == reponseCode ||
HttpStatus.TEMPORARY_REDIRECT.value() == reponseCode ||
HttpStatus.PERMANENT_REDIRECT.value() == reponseCode
) {
//获取响应头里的额Location
String location = connection.getHeaderField("Location");
return urlIsValidForApk(location);
}
} catch (MalformedURLException e) {
System.out.println("网址格式有误");
} catch (IOException e) {
System.out.println("链接无效");
}
return false;
}
说明
application/vnd.android.package-archive : 这种contentType 指的是 文件类型为apk文件类型的,一般在手机上 ,下载该apk之后即可自动安装。