在 Android TV 模拟器中打开 URL 不工作,在我的 Android 电视盒上工作正常

Opening a URL in the AndroidTV emulator does not work, works fine on my AndroidTV box

我制作了一个小型 AndroidTV 应用程序,可以查询休息 api 并显示它 returns 的内容。当我使用 AndroidTV 7 (API 25) 在我的 Nexus Player 上 运行 安装应用程序时,这没有任何问题。

为了能够在应用程序上工作,当我上下班时,我希望能够使用 AndroidTV 模拟器进行开发。但是当我在模拟器中 运行 我的应用程序时,我无法访问我的 api 端点。

模拟器确实有互联网连接。在 AndroidTV 模拟器中预装了 "Videos" 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 视频示例资源 URL 作为上述代码的输入,我可以获取它们的资源,在模拟器中 运行 时也是如此。 从我自己的休息端点(也可在互联网上公开获得)请求数据会出现 FileNotFoundException。

导致异常的 url 可以从我的主机访问而没有任何问题。

视频 Leanback 示例中的示例资源之一是: http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%20Extra%20Spicy/bg.jpg

在 Nexus Player 和模拟器中 运行ning 时,上面的代码可以毫无问题地获取此资源。 但似乎我无法从 googleapis.com 域以外的其他域获取资源。

我已经检查并更新了所有 Android 工具到最新版本。包括平台工具和系统镜像。

我也曾尝试删除所有可能已过时的 AVD 并创建新的 - 但没有成功。

我正在使用“-dns-server 8.8.8.8,8.8.4.4”参数启动 AVD,以便它能够进行 DNS 查找。

我可能弄错了,但似乎 googleapis.com 地址已经以某种方式在模拟器中列入了白名单。 有没有什么地方或设置可以让我将自己的 URL 列入白名单,或者在模拟器中 运行 时我可以通过互联网访问我的 api 的类似方式?

尝试检查模拟器设置中的代理。另一个常见问题:检查模拟器的date/time。如果旧,则 SSL 将不起作用。

我忘记更新了。

原来是 Android 模拟器中的错误。 Google 在报告问题后大约 6 个月修复了它。或者我猜他们更早修复了它,但直到 6 个月后才发布到 public。