private void prepareInternal() {
            try {
                MediaPlayer.this.prepareInternal();
                mCurrentState = MediaPlayer.State.PREPARED;

                // This event is only triggered after a successful async prepare (not after the sync prepare!)
                mEventHandler.sendEmptyMessage(MEDIA_PREPARED);
            } catch (IOException e) {
                Log.e(TAG, "prepareAsync() failed: cannot decode stream(s)", e);
                mEventHandler.sendMessage(mEventHandler.obtainMessage(MEDIA_ERROR,
                        MEDIA_ERROR_UNKNOWN, MEDIA_ERROR_IO));
                releaseInternal();
            } catch (IllegalStateException e) {
                Log.e(TAG, "prepareAsync() failed: something is in a wrong state", e);
                mEventHandler.sendMessage(mEventHandler.obtainMessage(MEDIA_ERROR,
                        MEDIA_ERROR_UNKNOWN, 0));
                releaseInternal();
            } catch (IllegalArgumentException e) {
                Log.e(TAG, "prepareAsync() failed: surface might be gone", e);
                mEventHandler.sendMessage(mEventHandler.obtainMessage(MEDIA_ERROR,
                        MEDIA_ERROR_UNKNOWN, 0));
                releaseInternal();
            }
        }
Removes a cue added by {@link #addCue(int, Object)} from the playback timeline.

@param cue the cue to remove
@return true if removal was successful, false if the cue wasn't cued on the timeline,
i.e. it has already been removed before
MediaPlayer/src/main/java/net/protyposis/android/mediaplayer/MediaPlayer.java