From 6c941c6c2b547c8c1f5dab5310f165e0d796fe96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Wed, 29 May 2013 02:06:16 +0200 Subject: Android: Make it possible for MediaPlayer to read from assets. The Android MediaPlayer doesn't handle assets automatically, so we need to open it and pass it in as a file descriptor. Task-number: QTBUG-31422 Change-Id: Ic29c0ab6348d760cf21aa89ae423d41e15523976 Reviewed-by: Yoann Lopes --- .../qt5/android/multimedia/QtAndroidMediaPlayer.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java index e4dbae632..d1abf658e 100644 --- a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java +++ b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java @@ -50,6 +50,9 @@ import android.content.Context; import android.media.MediaPlayer; import android.net.Uri; import android.util.Log; +import java.io.FileDescriptor; +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; public class QtAndroidMediaPlayer extends MediaPlayer { @@ -335,7 +338,17 @@ public class QtAndroidMediaPlayer extends MediaPlayer mPreparing = true; onMediaPlayerInfoNative(MEDIA_PLAYER_PREPARING, 0, mID); mUri = Uri.parse(path); - setDataSource(mApplicationContext, mUri); + if (mUri.getScheme().compareTo("assets") == 0) { + final String asset = mUri.getPath().substring(1 /* Remove first '/' */); + final AssetManager am = mApplicationContext.getAssets(); + final AssetFileDescriptor afd = am.openFd(asset); + final long offset = afd.getStartOffset(); + final long length = afd.getLength(); + FileDescriptor fd = afd.getFileDescriptor(); + setDataSource(fd, offset, length); + } else { + setDataSource(mApplicationContext, mUri); + } mInitialized = true; setOnPreparedListener(new MediaPlayerPreparedListener()); prepareAsync(); -- cgit v1.2.3