在VideoView中将MediaController保留在屏幕上

joa*_*him 6 android mediacontroller android-videoview

在使用VideoView时,我无法找到将MediaController保留在屏幕上的方法.我想在我的应用程序中播放res/raw中的音频文件.该文件正在播放,但我想将控制器保留在屏幕上,以便用户查看文件的长度以及在结束之前剩余的时间等.我在论坛上发现很多时间我们应该使用该方法.show (时间)为了做到这一点,但我无法弄清楚如何使它工作.

这是我正在使用的代码:

package com.sample.VideoViewExample;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoViewExample extends Activity implements SurfaceHolder.Callback{
   private VideoView mVideoView;
   private MediaController mMedia;

   @Override
   public void onCreate(Bundle icicle) {
     super.onCreate(icicle);
     setContentView(R.layout.main);

     mVideoView = (VideoView) findViewById(R.id.surface_view);
     //mVideoView.getHolder().addCallback(this);
     //mMedia.show(50000);
     //mVideoView.setMediaController(mMedia);

     MediaController mMedia = new MediaController(this);
     mMedia.setMediaPlayer(mVideoView);
     mMedia.setAnchorView(mVideoView);
     mVideoView.setMediaController(mMedia);

     mVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() +"/"+R.raw.osa_patient)); 

     mVideoView.requestFocus();
     mVideoView.start();

   }

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    mMedia.show(500000);

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub

}
}
Run Code Online (Sandbox Code Playgroud)

当我添加行mVideoView.getHolder().addCallback(this); 应用程序错误,我不知道为什么.

任何帮助或替代我想做的事情都非常欢迎:)

谢谢,JB

max*_*lls 12

这对我有用.只需扩展媒体控制器类.并覆盖hide方法.

    MediaController mediaController = new MyMediaController(this, true);

public class MyMediaController extends MediaController {

    public MyMediaController(Context context, boolean useFastForward) {
        super(context, useFastForward);
    }

    @Override
    public void hide() {
        mediaController.show(0);
    }

}
Run Code Online (Sandbox Code Playgroud)


joa*_*him 4

好吧我找到了!经过几个小时的研究!因此,据我所知,不知道如何在不同的论坛上做到这一点。这是我发现的一个技巧:

头等舱(例如...)

package com.sample.VideoViewExample;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.Window;
import android.view.WindowManager;
import android.widget.VideoView;

public class VideoViewExample extends Activity implements SurfaceHolder.Callback{
   private VideoView mVideoView;


   @Override
   public void onCreate(Bundle icicle) {
     super.onCreate(icicle);
     setContentView(R.layout.main);

     mVideoView = (VideoView) findViewById(R.id.surface_view);     
     mVideoView.setKeepScreenOn(true);

        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

     SurfaceHolder holder = mVideoView.getHolder();
     holder.addCallback(this);    
     MediaController_2 mMedia = new MediaController_2(this);

     mMedia.setMediaPlayer(mVideoView);
     mMedia.setAnchorView(mVideoView);     
     mVideoView.setMediaController(mMedia);
     mVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() +"/"+R.raw.osa_patient));     
     mVideoView.requestFocus();
     mVideoView.start();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub

}
}
Run Code Online (Sandbox Code Playgroud)

第二课(有技巧)

package com.sample.VideoViewExample;

import android.content.Context;
import android.widget.MediaController;

public class MediaController_2 extends MediaController{


    public MediaController_2(Context context) {
        super(context);

        // TODO Auto-generated constructor stub
    }

    public void hide() {
    }

}
Run Code Online (Sandbox Code Playgroud)

诀窍只是创建一个新的 MediaController 来扩展 Mediacontroller,并且该函数 hide() 不执行任何操作!

如果你想看一下 MediaController 源代码以便更好地理解,可以看这里: // MediaController 源代码http://hi-android.info/src/android/widget/MediaController.java.html

希望这对某人,JB有帮助

  • 扩展媒体控制器并重写隐藏方法禁用整个屏幕,并且无法检测除媒体控制器控件之外的活动的任何触摸事件。 (3认同)