Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android OnCompletionListener可以在3.0上工作,但不能在2.2上工作?_Java_Android - Fatal编程技术网

Java Android OnCompletionListener可以在3.0上工作,但不能在2.2上工作?

Java Android OnCompletionListener可以在3.0上工作,但不能在2.2上工作?,java,android,Java,Android,当应用程序运行在Android2.2和Android3.0上时,我的代码会有不同的行为,这些代码是为Android2.2构建的,并且在Eclipse中不提供构建错误。安卓2.2似乎没有像预期的那样完成监听器的工作。我做错了什么,或者安卓2.2和3.0在OnCompletionListener方面有什么不同吗 我的示例代码来自 发生了什么事?你期望发生什么?安卓2.2中从未调用过onCompletion函数,但它在3.0中调用过。 import android.app.Activity; impo

当应用程序运行在Android2.2和Android3.0上时,我的代码会有不同的行为,这些代码是为Android2.2构建的,并且在Eclipse中不提供构建错误。安卓2.2似乎没有像预期的那样完成监听器的工作。我做错了什么,或者安卓2.2和3.0在OnCompletionListener方面有什么不同吗

我的示例代码来自


发生了什么事?你期望发生什么?安卓2.2中从未调用过onCompletion函数,但它在3.0中调用过。
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;

public class MediaPlayerActivity extends Activity implements OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback {
    private final String TAG = "MediaPlayer";

    private SurfaceView m_preview;
        private SurfaceHolder m_holder;
        private Bundle m_extras;
        private String m_path;
        private MediaPlayer m_mediaPlayer;
        private int m_videoWidht;
        private int m_videoHeight;
        private boolean m_isVideoReadyToPlay;
        private boolean m_isVideoSizeKnown;
        private static final int LOCAL_VIDEO = 1;
        private static final int STREAM_VIDEO = 2;
        private static final String MEDIA = "media";

        private static final String FILE = "/mnt/sdcard/file1.avi";

        private WakeLock m_keepscreen;

        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "MediaPlayer::onCreate");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.videoplayer);
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        m_keepscreen = pm.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE | PowerManager.ACQUIRE_CAUSES_WAKEUP,"MediaPlayerActivity");
        m_preview = (SurfaceView) findViewById(R.id.surface);
        m_holder = m_preview.getHolder();
        m_holder.addCallback(this);
        m_holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        m_extras = getIntent().getExtras();

        m_keepscreen.acquire();
    }

    private void playVideo(Integer media){
        doCleanUp();
        try{
                switch (media){
                case LOCAL_VIDEO :
                        m_path = FILE;
                        Log.i(TAG, "File: "+FILE);
                        if(m_path == ""){
                                //
                        }
                        break;
                case STREAM_VIDEO:
                        Log.i(TAG, "PlayVideo, cant stream video yet");
                        break;
                }

                m_mediaPlayer = new MediaPlayer();
                m_mediaPlayer.setDataSource(m_path);
                m_mediaPlayer.setDisplay(m_holder);
                m_mediaPlayer.prepare();
                m_mediaPlayer.setOnBufferingUpdateListener(this);
                m_mediaPlayer.setOnPreparedListener(this);
                m_mediaPlayer.setOnCompletionListener(this);
                /*
                m_mediaPlayer.setOnCompletionListener(new OnCompletionListener(){
                            public void onCompletion(MediaPlayer mp) {
                                Log.i(TAG, "MediaPlayer::onCompletion");
                                startVideoPlayback();
                            }
                    });
                    */

                m_mediaPlayer.setOnVideoSizeChangedListener(this);
                m_mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        }catch (Exception e){
                Log.i(TAG, "Error: "+e.getMessage());
        }
    }

        private void doCleanUp() {
                m_videoWidht = 0;
                m_videoHeight = 0;
                m_isVideoReadyToPlay = false;
                m_isVideoSizeKnown = false;

        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                        int height) {
                Log.i(TAG, "MediaPlayer::surfaceChanged");
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
                Log.i(TAG, "MediaPlayer::surfaceCreated");
                playVideo(1);
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
                Log.i(TAG, "MediaPlayer::surfaceDestroyed");
        }

        @Override
        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                Log.i(TAG, "MediaPlayer::videoSizeChanged");
                if( width == 0 || height == 0 ){
                        Log.i(TAG, "invalid video with("+width+")or height ("+height+")");
                }
                m_isVideoSizeKnown = true;
                m_videoWidht = width;
                m_videoHeight = height;
                if(m_isVideoReadyToPlay && m_isVideoSizeKnown){
                        startVideoPlayback();
                }
        }

        private void startVideoPlayback() {
                Log.i(TAG, "StartVideoPlayback");
                m_holder.setFixedSize(m_videoWidht, m_videoHeight);
                m_mediaPlayer.start();
        }

        @Override
        public void onPrepared(MediaPlayer mp) {
                Log.i(TAG, "MediaPlayer::onPrepared");
                m_isVideoReadyToPlay = true;
                if(m_isVideoReadyToPlay && m_isVideoSizeKnown){
                        startVideoPlayback();
                }
        }

        @Override
        public void onCompletion(MediaPlayer mp) {
            //android 2.2 never get here
                Log.i(TAG, "MediaPlayer::onCompletion");
                startVideoPlayback();
        }

        @Override
        public void onBufferingUpdate(MediaPlayer mp, int percent) {
                Log.i(TAG, "MediaPlayer::onBufferingUpdate: "+percent+" %");
        }

        @Override
    protected void onPause() {
        super.onPause();
        releaseMediaPlayer();
        doCleanUp();
    }

        @Override
    protected void onDestroy() {
        super.onDestroy();
        releaseMediaPlayer();
        doCleanUp();
    }

        private void releaseMediaPlayer() {
        if (m_mediaPlayer != null) {
            m_mediaPlayer.release();
            m_mediaPlayer = null;
            m_keepscreen.release();
        }
    }
}