【问题标题】:Video from URL working on Android 4 but not on Android 9来自 URL 的视频适用于 Android 4 但不适用于 Android 9
【发布时间】:2019-05-20 14:14:55
【问题描述】:

此代码适用于 Android 4.4.2,但不适用于 Android 9 的手机:

String url="http://...LINK...mp4";
MediaController controller = new MediaController(context);
controller.setMediaPlayer(holder.video);
Uri videoUri = Uri.parse(url);
holder.video.setVideoURI(videoUri);
holder.video.requestFocus();
holder.video.start();

在 Android 9 上我收到错误消息(在 Android 4.4.2 上没有错误):

Couldn't open http://...LINK...mp4: java.io.FileNotFoundException: No content provider: http://...LINK...mp4

如何解决?

【问题讨论】:

  • 切换到https URL。
  • 完美!!!谢谢 :-) 请把它写成答案,我将标记为已解决

标签: android


【解决方案1】:

Android 9.0 blocks cleartext (http) traffic by default.

首选的解决方案是不使用http URL,而是使用https

您可以通过网络安全配置告诉 Android 允许您的应用使用明文流量,但这不太安全。

【讨论】:

  • 请告诉我,以防万一我如何修改我的网络安全配置以允许 http?
  • 我明白了,我会尝试使用https
  • 您可以为所有 URL 使用明文还是必须指定每个 URL?
  • @KrisB:您可以按域指定,并且可以包含子域(因此允许foo.com 也将允许www.foo.combar.foo.com)。您可以制定一揽子允许规则 (<base-config cleartextTrafficPermitted="true">),但如果将来某个时间开始与 Play 商店规则发生冲突,我不会感到惊讶。
  • 我的网络安全配置文件中实际上有<base-config cleartextTrafficPermitted="true">,它仍然阻止非HTTP 站点。我会被搞砸的,因为我使用第三方 API 将 RSS 提要返回到我的应用程序,而且并非所有这些都使用 HTTPS。
【解决方案2】:

您可以使用清单文件中的单行代码。它对我有用。

 <application
        android:usesCleartextTraffic="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity
            android:name=".EvaBotView"
            android:theme="@style/AppTheme.NoActionBar"
            android:configChanges="keyboardHidden|orientation|screenSize"/>
    </application>

在应用标签内我们可以使用 android:usesCleartextTraffic="true" 来解决这个问题。

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2015-11-04
    • 2015-12-14
    • 2012-01-27
    • 2019-08-06
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多