В моем приложении есть фотогалерею, в которой отображается постоянный список изображений. Мне нужно добавить один видео в этот список (только один, предоставленный мной). Это видео находится в файле расширения . Я хотел бы позволить пользователю решить, какой видеоплеер он хочет использовать для воспроизведения видео. Так что я пошел на намерения подхода:Невозможно воспроизвести видео через намерение
public void playVideo(View view){
Intent videoint = new Intent(Intent.ACTION_VIEW);
Uri uri = CustomAPEZProvider.buildUri("test.3gp");
Log.d("TEST", uri.toString());
videoint.setDataAndType(uri, "video/*");
startActivity(videoint);
}
Мои CustomAPEZProvider
является следующее:
public class CustomAPEZProvider extends APEZProvider {
private static final String AUTHORITY = "com.myapp.package.provider";
@Override
public String getAuthority() {
return AUTHORITY;
}
public static Uri buildUri(String path) {
StringBuilder contentPath = new StringBuilder("content://");
contentPath.append(AUTHORITY);
contentPath.append(File.separator);
contentPath.append(path);
return Uri.parse(contentPath.toString());
}
}
Кроме того, я добавил это мой манифест:
<provider android:name="com.myapp.package.CustomAPEZProvider"
android:authorities="com.myapp.package.provider" >
android:exported="true"
android:multiprocess="true">
<meta-data
android:name="mainVersion"
android:value="4"/>
</provider>
provider
имеет этот meta-data
, потому что версия файла расширения отличается от кода версии приложения.
Я понимаю, что файл найден, но видеоплееры не могут его воспроизвести. Они запускают не могут воспроизводить это видео окно (и никаких ошибок). Я тестировал его на многих устройствах и с различными типами видео. Видео 3gp, которое я использую для тестирования, можно воспроизвести как можно лучше в родной галерее телефона.
Линия 3 по методу playVideo
печатает этот
содержание: //com.myapp.package.provider/test.3gp
Это правильно, верно?
Файл расширения не имеет папок, файлы просто загружаются в корень.
Кроме того, мне действительно нужно воспроизвести это видео test.3gp
с файла patch. Будет ли разница в этом случае? На данный момент я устраняю это препятствие. Я знаю, что должен добавить его к метаданным провайдера.
Дополнительная информация: файл расширения содержит несколько аудиофайлов, которые я могу играть с помощью MediaPlayer
без каких-либо проблем. Конечно, это другое, потому что в этом случае я делаю это, получая файл AssetFileDescriptor
в файл расширения obb, тогда как с видео мне нужен Uri
, который меняет все.
Я прочитал много вопросов с похожими проблемами, но они не помогли. У кого-то была такая же проблема?
Методы обхода также приветствуются. Например, я мог бы согласиться использовать VideoView
, если это необходимо.
UPDATE
Я просто понял, что видео плеер не работает, даже если файл является ресурсом (внутри Drawable, сырой, или любой другой).Мне удалось воспроизвести видео на код ниже:
public void playVideo(View view){
Uri uri = CustomAPEZProvider.buildUri("test.3gp");
getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
videoHolder.setMediaController(new MediaController(this));
videoHolder.setVideoURI(uri);
setContentView(videoHolder);
videoHolder.start();
}
Но это не совсем то, что я хочу, я бы очень хотел, чтобы позволить пользователю выбрать видеоплеер его предпочтения. В основном потому, что я хочу освободиться от ответственности за кодирование видеопроигрывателя с приятным взглядом.
Но как насчет этого (цитирую себя)? * Видео в 3gp, которое я использую для тестирования, может быть отлично воспроизведено из собственной галереи телефона. * Я также тестирую файл mp4, и у меня такая же проблема. – user4830843