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 d1abf658e488bbb8f597ba6a1ba939055908e333..2ca07a63e9fc006b50a61f60f09c9e1392d32f87 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
@@ -191,8 +191,8 @@ public class QtAndroidMediaPlayer extends MediaPlayer
         @Override
         public void onPrepared(final MediaPlayer mp)
         {
-            onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID);
             onMediaPlayerInfoNative(MEDIA_PLAYER_READY, 0, mID);
+            onMediaPlayerInfoNative(MEDIA_PLAYER_DURATION, getDuration(), mID);
             mPreparing = false;
         }
 
diff --git a/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp
index a70f4e1302ee65e6d628e90aee89d83e6d3f082d..4dc56ebd98fe07e1fe471e6ef520d320a6bebd4c 100644
--- a/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp
+++ b/src/plugins/android/mediaplayer/qandroidmediaplayercontrol.cpp
@@ -98,8 +98,9 @@ QMediaPlayer::MediaStatus QAndroidMediaPlayerControl::mediaStatus() const
 qint64 QAndroidMediaPlayerControl::duration() const
 {
     return (mCurrentMediaStatus == QMediaPlayer::InvalidMedia
-            || mCurrentMediaStatus == QMediaPlayer::NoMedia) ? 0
-                                                             : mMediaPlayer->getDuration();
+            || mCurrentMediaStatus == QMediaPlayer::NoMedia
+            || !mMediaPlayerReady) ? 0
+                                   : mMediaPlayer->getDuration();
 }
 
 qint64 QAndroidMediaPlayerControl::position() const
@@ -330,14 +331,12 @@ void QAndroidMediaPlayerControl::onMediaPlayerInfo(qint32 what, qint32 extra)
         setState(QMediaPlayer::StoppedState);
         break;
     case JMediaPlayer::MEDIA_PLAYER_READY:
+        setMediaStatus(QMediaPlayer::LoadedMedia);
         if (mBuffering) {
             setMediaStatus(mBufferPercent == 100 ? QMediaPlayer::BufferedMedia
                                                  : QMediaPlayer::BufferingMedia);
         } else {
-            setMediaStatus(QMediaPlayer::LoadedMedia);
-            mBufferPercent = 100;
-            Q_EMIT bufferStatusChanged(mBufferPercent);
-            updateAvailablePlaybackRanges();
+            onBufferChanged(100);
         }
         setAudioAvailable(true);
         mMediaPlayerReady = true;
@@ -402,7 +401,7 @@ void QAndroidMediaPlayerControl::onError(qint32 what, qint32 extra)
 
 void QAndroidMediaPlayerControl::onBufferChanged(qint32 percent)
 {
-    mBuffering = true;
+    mBuffering = percent != 100;
     mBufferPercent = percent;
     Q_EMIT bufferStatusChanged(mBufferPercent);