android播放音频,视频的操作及注意事项

    xiaoxiao2021-03-26  32

    android播放音频视频

    首先,申请权限,音频视频的权限都是一样的 注意的是,音频视频都只要WRITE_EXTERNAL_STORAGE这个权限,Intnet权限是为了获取网络uri的视频而给的权限。 一开始oncreat里面的手动申请权限 音频视频都为这一个权限。

    值得注意的是,seekbar这个内部类,需要重写三个方法,分别是 onProgressChanged(),onStartTrackingTouch(),onStopTrackingTouch() 三个方法。

    android自带的视频控制器,是没有记录拖动播放的功能的,所以必须自己去定义。手机获取的音频视频时长都为毫秒,需要/1000才是秒。

    以下代码就在手机SD卡目录中的一个音频,视频播放,如果联网,需要uri.parse()去解析,再去根据uri并联网执行(需要联网权限)。

    最后,重写onDestroy()方法时,要记得释放资源

    @Override public void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } if (videoView != null) { videoView.suspend(); } } <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET" /> public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Bind(R.id.seek_view_bar) SeekBar seekViewBar; private MediaPlayer mediaPlayer = new MediaPlayer(); private boolean isChanging = false; private boolean isStarting = false; // private int currentPosition;//目前简单功能还不需要记录进度,所以用不到该int private Timer timer; @Bind(R.id.start_btn) Button startBtn; @Bind(R.id.pause_btn) Button pauseBtn; @Bind(R.id.cancel_btn) Button cancelBtn; @Bind(R.id.time_txt) TextView timeTxt; @Bind(R.id.seek_bar) SeekBar seekBar; // private VideoView videoView;//问题出在一直重复声明videoview导致错误。很傻逼.@Bind已经全部完成了的 @Bind(R.id.vedio_view) VideoView videoView; @Bind(R.id.start_video_btn) Button startVideoBtn; @Bind(R.id.pause_video_btn) Button pauseVideoBtn; @Bind(R.id.replay_video_btn) Button replayVideoBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // videoView = (VideoView) this.findViewById(R.id.vedio_view); //错啊错 startBtn.setOnClickListener(this); pauseBtn.setOnClickListener(this); cancelBtn.setOnClickListener(this); startVideoBtn.setOnClickListener(this); pauseVideoBtn.setOnClickListener(this); replayVideoBtn.setOnClickListener(this); //手动申请权限,视频音频权限为同一个 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission. WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);//权限返回码为1 } else { initAudio(); initVideo(); } } /** * 打开mp4文件,文件名为movie.mp4 */ private void initVideo() { File file = new File(Environment.getExternalStorageDirectory(), "movie.mp4"); //这是针对网络视频的加载uri。但是对网络视频有许多限制。 //网络uri视频,需要加入联网权限。切记,否则无法播放视频 // Uri uri = Uri.parse("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"); // videoView.setVideoURI(uri); videoView.setVideoPath(file.getPath()); videoView.requestFocus(); videoView.setMediaController(new MediaController(this));//调出视频控制器,前后进什么的 } /** * 为固定的SD卡目录下music.mp3文件播放 */ private void initAudio() { try { File file = new File(Environment.getExternalStorageDirectory(), "music.mp3"); mediaPlayer.setDataSource(file.getPath());//准备文件 mediaPlayer.prepare();//完成准备工作 } catch (Exception e) { e.printStackTrace(); } } /** * 依旧是申请权限 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { initAudio(); } else { Toast.makeText(this, "您禁止了权限,所以无法访问~", Toast.LENGTH_SHORT).show(); finish(); } break; default: break; } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.start_btn: if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); int time = mediaPlayer.getDuration(); //获得的时间长度除以1000才是秒数 int min = time / 1000 / 60; int s = (time / 1000) % 60; Toast.makeText(this, "" + min + "分钟" + s + "秒", Toast.LENGTH_SHORT).show(); timeTxt.setText("" + min + "分钟" + s + "秒"); //设置定时器,配合seekbar使用更新进度 timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (!isChanging) { seekBar.setMax(mediaPlayer.getDuration());//设置进度条最大值 seekBar.setOnSeekBarChangeListener(new MySeekbar());//Myseekbar的类实例 seekBar.setProgress(mediaPlayer.getCurrentPosition());//seekbar设置进度 } } }, 0, 50); } break; case R.id.pause_btn: if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } break; case R.id.cancel_btn: if (mediaPlayer.isPlaying()) { mediaPlayer.reset(); initAudio(); } break; case R.id.start_video_btn: if (!videoView.isPlaying()) { videoView.start(); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (!isStarting) { seekViewBar.setMax(videoView.getDuration()); seekViewBar.setOnSeekBarChangeListener(new MyMySeekbar()); seekViewBar.setProgress(videoView.getCurrentPosition()); } } }, 0, 100); /** * 该段代码,动态设置全屏模式。 */ /* LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); videoView.setLayoutParams(layoutParams);*/ } break; case R.id.pause_video_btn: if (videoView.isPlaying()) { videoView.pause(); } break; case R.id.replay_video_btn: if (videoView.isPlaying()) { videoView.resume(); } break; default: break; } } class MyMySeekbar implements SeekBar.OnSeekBarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { //这里面是写进度改变的代码 // int targettime = videoView.getDuration()*seekViewBar.getProgress()/100; // videoView.seekTo(targettime); } @Override public void onStartTrackingTouch(SeekBar seekBar) { isStarting = true; } @Override public void onStopTrackingTouch(SeekBar seekBar) { videoView.seekTo(seekViewBar.getProgress()); isStarting = false; } } /** * MySeekbar需要一个内部类,重写三个方法 */ class MySeekbar implements SeekBar.OnSeekBarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { } //滚动时暂停后台的定时器 @Override public void onStartTrackingTouch(SeekBar seekBar) { isChanging = true; } //滑动结束后,重新设定值 @Override public void onStopTrackingTouch(SeekBar seekBar) { mediaPlayer.seekTo(seekBar.getProgress()); isChanging = false; } } @Override public void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } if (videoView != null) { videoView.suspend(); } } }
    转载请注明原文地址: https://ju.6miu.com/read-658736.html

    最新回复(0)