我的应用正在使用来自HTTPS来源的图片,他们在使用API 21或更高版本的Android上正常加载,但我无法在API 16的Android版本上加载这些图片(我的最小API)应用)到API 19.有没有办法在较旧的Android版本上启用TLS?它似乎默认在Lollipop和更高版本上启用。帮助将不胜感激!在此先感谢:)
答案 0 :(得分:0)
有没有办法在较旧的Android版本上启用TLS?
自Android 1.0以来,Android已启用TLS。多年来,特定级别的TLS和特定根证书都有所不同(在证书的情况下,甚至可能因旧设备上的制造商而异)。
我无法将这些图片从API 16(我的应用程序的最小API)加载到API 19
检查LogCat是否有Picasso记录的异常。或者,在您直接下载图像的地方运行一些测试(例如,OkHttp,HttpURLConnection
),以确保您获得例外。
然后,如果您不了解如何解决这些异常,请提出一个单独的Stack Overflow问题,其中提供minimum, complete, and verifiable example,其中包括您的代码,失败的URL以及Java堆栈跟踪与例外有关。
答案 1 :(得分:0)
您可以使用OKHttp。
在预KitKat设备中启用http2 List<Protocol> protocols = new ArrayList<>();
protocols.add(Protocol.HTTP_2);
protocols.add(Protocol.HTTP_1_1);
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, null);
ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.build();
List<ConnectionSpec> specs = new ArrayList<>();
specs.add(cs);
specs.add(ConnectionSpec.COMPATIBLE_TLS);
specs.add(ConnectionSpec.CLEARTEXT);
mClient = new OkHttpClient.Builder()
.protocols(protocols)
.connectionSpecs(specs)
.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()))
.build();
将此客户端添加到Picasso
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
Picasso picasso = new Picasso.Builder(getApplicationContext())
.downloader(new OkHttp3Downloader(mClient))
.build();
Picasso.setSingletonInstance(picasso);
}