首页 > 解决方案 > 使用没有外部存储权限的 ExoPlayer

问题描述

我有一个使用Xamarin Forms制作的 Android 应用程序,它使用 ExoPlayer 播放流媒体和本地视频。当.mp4应用程序下载文件时,它们会保存到内部存储 ( Environment.SpecialFolder.Personal),而不会保存到 SD 卡等外部位置。

我想限制应用程序所需的权限,并且不想添加 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE。在应用程序的其他部分,我已成功将文件写入和读取到内部存储,而无需添加任何外部存储权限。

.mp4除非我将(<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />WRITE版本)添加到AndroidManifest.xml. ExoPlayer 将向我显示“访问存储的权限被拒绝”toast 并拒绝播放视频。我相信 ExoPlayer 正在测试是否存在外部存储权限,即使我认为不需要它,并且在没有实际尝试播放视频的情况下退出。

如何在不测试外部存储权限的情况下强制 ExoPlayer 播放视频?

标签: xamarinxamarin.formsexoplayer

解决方案


听起来您正在调用该MaybeRequestReadExternalStoragePermission方法。该MaybeRequestReadExternalStoragePermission方法负责确保 App 具有访问外部存储的权限。ExoPlayer 不会在内部处理此问题,但假定应用程序开发人员在应用程序需要从外部存储访问内容时调用此方法。

查看实现:https ://github.com/google/ExoPlayer/blob/000f3f23056aae30a98ac74fb30e484844548b3e/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java#L159

确保不要MaybeRequestReadExternalStoragePermission从源代码中调用方法(通常这是在PlayerActivity类中从InitializePlayer方法中完成的)。现在您也可以<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />AndroidManifest.xml.

请注意,如果您尝试在没有权限的情况下访问外部存储,您的应用程序将会崩溃。


推荐阅读