2016-03-21 62 views
0

我使用MediaPlayer来显示视频。我需要循环它。我使用本地方法setLooping(),但它不起作用。视频已完成,就这些了。这里是我的代码:MediaPlayer setLooping(true)不起作用

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_full_screen); 

     TextureView videoViewFullScreen = (TextureView) findViewById(R.id.video_screen); 

     path = getIntent().getExtras().getString(SettingsActivity.FILE_PATH); 
     cycle = getIntent().getExtras().getBoolean(SettingsActivity.CYCLE); 

     position = getIntent().getIntExtra(FullScreenActivity.POSITION, -1); 

     videoViewFullScreen.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { 
      @Override 
      public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 

       final Surface surf = new Surface(surface); 
       try { 
        mediaPlayerFullScreen = new MediaPlayer(); 
        mediaPlayerFullScreen.setDataSource(path); 
        mediaPlayerFullScreen.setSurface(surf); 
        if (cycle) { 
         mediaPlayerFullScreen.setLooping(true); 
        } 

        mediaPlayerFullScreen.prepareAsync(); 

        mediaPlayerFullScreen.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
         @Override 
         public void onPrepared(MediaPlayer mediaPlayer) { 
          if (position != -1) { 
           Log.d("Position", "Position Full " + position); 
           mediaPlayerFullScreen.seekTo(position); 
          } 

          mediaPlayer.start(); 
         } 
        }); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

      @Override 
      public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 
      } 

      @Override 
      public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
       mediaPlayerFullScreen.stop(); 
       mediaPlayerFullScreen.release(); 
       mediaPlayerFullScreen = null; 
       return true; 
      } 

      @Override 
      public void onSurfaceTextureUpdated(SurfaceTexture surface) { 
      } 
     }); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (mediaPlayerFullScreen != null) { 
      mediaPlayerFullScreen.stop(); 
      mediaPlayerFullScreen.release(); 
      mediaPlayerFullScreen = null; 
     } 
    } 

我看了所有类似的问题,并尝试了所有在这里找到的答案,但没有人帮助我。 我有Android版本4.4.2,固件版本4.5,内核版本3.3.0 有人可以帮我吗?有没有其他方式来循环播放视频?

回答

0

我找到替代setLooping(真),这个工作对我来说:

    mediaPlayerFullScreen.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mp) { 
         mediaPlayerFullScreen.reset(); 
         try { 
          mediaPlayerFullScreen.setDataSource(path); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
         mediaPlayerFullScreen.setSurface(surf); 
         mediaPlayerFullScreen.prepareAsync(); 

         mediaPlayerFullScreen.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
          @Override 
          public void onPrepared(MediaPlayer mediaPlayer) { 
           mediaPlayer.start(); 
          } 
         }); 
        } 
       }); 
相关问题