2013-05-30 100 views
2

我正在构建PhoneGap应用程序,其中包含大型音频和视频文件。在Android中,媒体文件应放在扩展文件中,以将应用程序大小限制在Google Play 50 MB的限制范围内。有没有办法让Url访问Android扩展文件中的特定文件?

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

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

但是,我不知道是否有一种方式来获得一个URL的扩展文件里面的视频文件?这将允许我的应用程序将URL添加到用户的首选媒体播放器应用程序启动的Intent,我更喜欢这种方法。

回答

2

我发现自己是通过内容提供者完成此操作的一种方式。我从问题android play movie inside expansion file得到了有关内容提供者的提示,但在该问题中,该URL并未用于启动外部应用程序。

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

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

,它需要被添加到清单,并远销:

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

在清单和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); 

内容提供商提供,现在访问zip文件,这些文件只是在URL中。

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

+0

如果有人想知道,这是因为File插件找不到URL,即使它在那里。请参阅我在此处忽略的拉取请求:https://github.com/agamemnus/cordova-plugin-media/commit/6fd5193225c291a11b65e6a261b0974a30e30e8d ... Pasi:如果您可以将Chromium嵌入到媒体中,则不再需要使用媒体插件。使用''platforms/android/assets/xwalk-command-line''中的''xwalk --disable-gesture-require-for-media-playback''! – Agamemnus

相关问题