在没有外部存储权限的情况下使用 ExoPlayer

Use ExoPlayer Without External Storage Permissions

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

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

我无法将 .mp4 文件加载到 ExoPlayer 中,除非我将 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />(或 WRITE 版本)添加到 AndroidManifest.xml。 ExoPlayer 将向我显示 "Permission to access storage was denied" 吐司并拒绝播放视频。我相信 ExoPlayer 正在测试是否存在外部存储权限,尽管我认为不需要它,并且在没有真正尝试播放视频的情况下退出。

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

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

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

确保您没有从源代码中调用 MaybeRequestReadExternalStoragePermission 方法(通常这是在 PlayerActivity class 中从 InitializePlayer 方法中完成的) .现在您还可以从 AndroidManifest.xml.

中删除 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

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