【问题标题】:Is there a way to get a Url to a specific file in Android expansion file?有没有办法将 URL 获取到 Android 扩展文件中的特定文件?
【发布时间】:2013-06-10 17:38:59
【问题描述】:

我正在构建一个包含大量音频和视频文件的 PhoneGap 应用程序。在 Android 中,媒体文件应位于扩展文件中,以将应用程序大小保持在 Google Play 50 MB 的限制之下。

我目前正在考虑两种播放视频文件的方法:

  1. 将所需的视频文件从扩展文件解压缩(可能是暂时的)到 SD 卡,获取其 URL 并启动媒体播放器应用程序。解包需要一些时间,因此用户必须等待几秒钟,具体取决于视频的大小。
  2. 使用 Android 的 VideoView 类将我自己的视频播放器编写为 PhoneGap 插件。这样我就可以直接从扩展文件中播放而无需先解压缩文件并获得响应更快的应用程序。

但是,我想知道是否有办法获取扩展文件中的视频文件的 URL?这将允许我的应用程序将 URL 添加到启动用户首选媒体播放器应用程序的 Intent 中,我更喜欢这种方法。

【问题讨论】:

    标签: android cordova android-videoview


    【解决方案1】:

    我发现自己可以通过内容提供商来做到这一点。我从问题 android play movie inside expansion file 中得到了有关内容提供程序的提示,尽管在该问题中,该 URL 并未用于启动外部应用程序。

    我们需要一个扩展 Google 的 APEZProvider 的 ContentProvider 类:

    public class ZipFileContentProvider extends APEZProvider {
        @Override
        public String getAuthority() {
            return "com.example.expansionexperiment.provider";
        }
    }
    

    并且需要添加到Manifest并导出:

    <provider
        android:exported="true"
        android:name="com.example.expansionexperiment.ZipFileContentProvider"
        android:authorities="com.example.expansionexperiment.provider" />
    

    manifest 和 getAuthority() 中的权限必须相同。

    现在我们可以为扩展文件中的文件创建一个 Uri:

    // Filename inside my expansion file
    String filename = "video/video.mp4";
    String uriString = "content://com.example.expansionexperiment.provider" +  File.separator + filename;
    Uri uri = Uri.parse(uriString);
    
    // Start video view intent
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(uri, "video/*");
    startActivity(intent);
    

    内容提供商现在仅通过 URL 提供对 zip 文件和其中文件的访问。

    但是,PhoneGap 的 Media 插件不支持内容提供者,因为如果 URL 不以 http 开头,它会在 URL 前面插入“/sdcard/”。 (!!!) 因此,要通过 zip 内容提供程序播放音频文件,您需要编写自己的音频插件。

    【讨论】:

    • 如果有人想知道,这是因为文件插件找不到 URL,即使它在那里。在此处查看我被忽略的拉取请求:github.com/agamemnus/cordova-plugin-media/commit/… ... Pasi:如果您可以嵌入 Chromium,则不再需要使用 Media 插件。人行横道并在platforms/android/assets/xwalk-command-line 中使用xwalk --disable-gesture-requirement-for-media-playback
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2012-03-04
    • 2019-06-14
    • 2015-02-07
    • 1970-01-01
    • 2017-08-21
    • 2023-01-13
    相关资源
    最近更新 更多