我制作了一个小型的AndroidTV应用程序,可以查询rest api并显示它返回的内容。当我在带有AndroidTV 7(API 25)的Nexus Player上运行应用程序时,这没有任何问题。
为了能够在应用程序上工作,当我上下班时,我希望能够使用AndroidTV模拟器进行开发。但是当我在模拟器中运行我的应用程序时,我无法访问我的api端点。
模拟器确实具有互联网连接。在AndroidTV模拟器中,"视频" leanback样本已预先安装。这可以访问互联网并从他们的端点获取图像。
我目前使用的代码如下所示:
final URL url1;
HttpURLConnection urlConnection = null;
try {
url1 = new URL(url);
urlConnection = (HttpURLConnection) url1.openConnection();
urlConnection.setUseCaches(true);
urlConnection.addRequestProperty("Cache-Control", "only-if-cached");
int maxStale = 60 * 60 * 10; // tolerate stale time in seconds
urlConnection.addRequestProperty("Cache-Control", "max-stale=" + maxStale);
return urlConnection.getInputStream();
} finally {...}
如果我使用Google视频示例资源网址作为上述代码的输入,我也可以在模拟器中运行时获取其资源。 从我自己的休息端点请求数据(也可在互联网上公开获得)会产生FileNotFoundException。
导致异常的网址可以从我的主机访问而没有任何问题。
视频leanback示例中的一个示例资源就是这样: http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%20Extra%20Spicy/bg.jpg
上面的代码可以在Nexus Player和模拟器中运行时获取此资源而不会出现任何问题。 但似乎我无法从googleapis.com域以外的其他域获取资源。
我已检查并将所有Android工具更新到最新版本。包括平台工具和系统映像。
我还尝试删除所有可能已过时且创建新AVD的AVD - 但没有成功。
我使用" -dns-server 8.8.8.8,8.8.4.4"启动AVD。参数,以便它应该能够进行DNS查找。
我可能会弄错,但似乎googleapis.com地址已经在模拟器中以某种方式列入白名单。 是否有一些地方或设置可以将我自己的网址列入白名单,或者在模拟器中运行时可以通过互联网访问我的api的类似方式?
答案 0 :(得分:0)
尝试检查模拟器设置上的代理。另一个常见问题:检查模拟器的日期/时间。如果过旧,则SSL将不起作用。
答案 1 :(得分:0)
我忘了更新。
事实证明这是Android模拟器中的错误。 Google在报告此问题后大约6个月内修复了该问题。或者我想他们早于修复它,但是直到6个月后才向公众发布。