我发现自己是通过内容提供者完成此操作的一种方式。我从问题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内容提供商播放音频文件,您需要编写自己的音频插件。
如果有人想知道,这是因为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