• 第一行代码 Android 第八章8.4(播放多媒体文件(MediaPlayer播放音频,VideoView播放视频))


    8.4 播放多媒体文件
    8.4.1 播放音频
            在Android中播放音频文件一般都是使用MediaPlayer类来实现的,它对多种格式的音频文件提供了非常全面的控制方法。

    方法名 功能描述
    setDataSource() 设置要播放的音频文件的位置
    prepare() 在开始播放之前调用这个方法来完成准备工作
    start() 开始或继续播放音频
    pause() 暂停播放音频
    reset() 将MediaPlayer对象重置到刚刚创建的状态,若在播放状态也会停止播放
    seekTo() 从指定的位置开始播放音频
    stop() 停止播放音频,调用这个方法后MediaPlayer对象无法再播放音频
    release() 释放掉与MediaPlayer对象的相关资源
    isPlaying() 判断当前MediaPlayer是否正在播放音频
    getDuration() 获取载入的音频文件的时长

    MediaPlayer的工作流程:1)首先需要创建一个MediaPlayer对象
                                              2)调用MediaPlayer对象的setDataSource()方法来设置音频文件路径
                                              3)再调用prepare()使MediaPlayer进入到准备状态
                                              4)最后调用start()方法就可以开始播放音乐了
                                              5)调用pause()方法就会暂停播放
                                              6)调用reset()方法就会停止播放

    1. //新建一个PlayAudioTest项目
    2. //修改activity_main中的代码
    3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    4. android:orientation="vertical"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent">
    7. <Button
    8. android:id="@+id/play"
    9. android:layout_width="match_parent"
    10. android:layout_height="wrap_content"
    11. android:text="Play" />
    12. <Button
    13. android:id="@+id/pause"
    14. android:layout_width="match_parent"
    15. android:layout_height="wrap_content"
    16. android:text="Pause" />
    17. <Button
    18. android:id="@+id/stop"
    19. android:layout_width="match_parent"
    20. android:layout_height="wrap_content"
    21. android:text="Stop" />
    22. LinearLayout>
    1. //上面布局文件中放置了三个按钮,分别是对音频文件进行播放,暂停和停止操作。
    2. //修改MainActivity中的代码
    3. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    4. private MediaPlayer mediaPlayer = new MediaPlayer();
    5. @Override
    6. protected void onCreate(Bundle savedInstanceState) {
    7. super.onCreate(savedInstanceState);
    8. setContentView(R.layout.activity_main);
    9. Button play = (Button) findViewById(R.id.play);
    10. Button pause = (Button) finfViewById(R.id.pause);
    11. Button stop = (Button) findViewById(R.id.stop);
    12. play.setOnClickListener(this);
    13. pause.setOnClickListener(this);
    14. stop.setOnClickListener(this);
    15. //由于音频要放在SD卡中,因此动态申请运行时权限处理
    16. if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != Packagemanager.PERMISSION_GRANTED) {
    17. ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL},1);
    18. } else {
    19. initMediaPlayer(); //初始化MediaPlayer
    20. }
    21. }
    22. private void initMediaPlayer() {
    23. try {
    24. File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
    25. mediaPlayer.setDataSource(file.getPath()); //指定音频文件的路径
    26. mediaPlayer.prepare(); //让MediaPlayer进入到准备状态
    27. } catch (Exception e) {
    28. e.printStackTrace()
    29. }
    30. }
    31. @Override
    32. public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
    33. switch (requestCode) {
    34. case 1:
    35. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    36. initMediaPlayer();
    37. } else {
    38. Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
    39. finish();
    40. }
    41. break;
    42. dafault:
    43. }
    44. }
    45. @Override
    46. public void onClick(View v) {
    47. switch (v.getId()) {
    48. case R.id.play:
    49. if (!mediaPlayer.isPlaying()) {
    50. mediaPlayer.start(); //开始播放
    51. }
    52. break;
    53. case R.id.pause:
    54. if (mediaPlayer.isPlaying()) {
    55. mediaPlayer.pause(); //暂停播放
    56. }
    57. break;
    58. case R.id.stop:
    59. if (mediaPlayer.isPlaying()) {
    60. mediaPlayer.reset(); //暂停播放
    61. }
    62. break;
    63. dafault:
    64. break;
    65. }
    66. }
    67. @Override
    68. protected void OnDestroy() {
    69. super.onDestory();
    70. if (mediaPlayer != null) {
    71. mediaPlayer.stop();
    72. mediaPlayer.release();
    73. }
    74. }
    75. }
    1. //还有一个重要的点是千万不要忘记要在AndroidManifest文件中声明用到的权限
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="com.example.playaudiotest">
    4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    5. ...
    6. manifest>

    8.4.2 播放视频
            播放视频文件其实并不比音频文件复杂,主要是使用VideoView类来实现的,这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。他也有很多方法:

    方法名 功能描述
    setVideoPath() 设置要播放的视频文件的位置
    start() 开始或继续播放视频
    pause() 暂停播放视频
    resume() 将视频重头开始播放
    seekTo() 从指定的位置开始播放视频
    isPlaying() 判断当前是否正在播放视频
    getDuration() 获取载入的视频文件的时长
    suspend()用于将VideoView所占用的资源释放掉的
    1. //新建一个PlayVideoTest项目
    2. //修改activity_main中的代码
    3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    4. android:orientation="vertical"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent">
    7. <LinearLayout
    8. android:layout_width="match_parent"
    9. android:layout_height="wrap_content">
    10. <Button
    11. android:id="@+id/play"
    12. android:layout_width="0dp"
    13. android:layout_height="wrap_content"
    14. android:layout_weight="1"
    15. android:text="Play" />
    16. <Button
    17. android:id="@+id/pause"
    18. android:layout_width="0dp"
    19. android:layout_height="wrap_content"
    20. android:layout_weight="1"
    21. android:text="Pause" />
    22. <Button
    23. android:id="@+id/replay"
    24. android:layout_width="0dp"
    25. android:layout_height="wrap_content"
    26. android:layout_weight="1"
    27. android:text="Replay" />
    28. LinearLayout>
    29. <VideoView
    30. android:id="@id/video_view"
    31. android:layout_width="match_parent"
    32. android:layout_height="wrap_content" />
    33. LinearLayout>
    1. //上面布局文件中放置了三个按钮,分别是控制视频文件进行播放,暂停和停止操作。按钮下面还有一个VideoView用来放视频的
    2. //修改MainActivity中的代码
    3. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    4. private MediaPlayer mediaPlayer = new MediaPlayer();
    5. @Override
    6. protected void onCreate(Bundle savedInstanceState) {
    7. super.onCreate(savedInstanceState);
    8. setContentView(R.layout.activity_main);
    9. Button play = (Button) findViewById(R.id.play);
    10. Button pause = (Button) finfViewById(R.id.pause);
    11. Button replay = (Button) findViewById(R.id.replay);
    12. play.setOnClickListener(this);
    13. pause.setOnClickListener(this);
    14. replay.setOnClickListener(this);
    15. //由于音频要放在SD卡中,因此动态申请运行时权限处理
    16. if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != Packagemanager.PERMISSION_GRANTED) {
    17. ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL},1);
    18. } else {
    19. initVideoPath(); //初始化VideoView
    20. }
    21. }
    22. private void initVideoPath() {
    23. File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4");
    24. videoView.setVideoPath(file.getPath()); //指定视频文件的路径
    25. }
    26. @Override
    27. public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
    28. switch (requestCode) {
    29. case 1:
    30. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    31. initVideoPath();
    32. } else {
    33. Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
    34. finish();
    35. }
    36. break;
    37. dafault:
    38. }
    39. }
    40. @Override
    41. public void onClick(View v) {
    42. switch (v.getId()) {
    43. case R.id.play:
    44. if (!VideoView.isPlaying()) {
    45. VideoView.start(); //开始播放
    46. }
    47. break;
    48. case R.id.pause:
    49. if (VideoView.isPlaying()) {
    50. VideoView.pause(); //暂停播放
    51. }
    52. break;
    53. case R.id.stop:
    54. if (VideoView.isPlaying()) {
    55. VideoView.reset(); //暂停播放
    56. }
    57. break;
    58. dafault:
    59. break;
    60. }
    61. }
    62. @Override
    63. protected void OnDestroy() {
    64. super.onDestory();
    65. if (VideoView != null) {
    66. VideoView.suspend(); //suspend()方法是用于将VideoView所占用的资源释放掉的
    67. }
    68. }
    69. }
    1. //还有一个重要的点是千万不要忘记要在AndroidManifest文件中声明用到的权限
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="com.example.playaudiotest">
    4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    5. ...
    6. manifest>
  • 相关阅读:
    【算法训练营】 - ⑩ 并查集与图
    数据结构~~~~ [队列] ~~~~
    Git 常用基本命令
    接口中的抽象方法,默认方法,静态方法,私有方法
    【无标题】
    第5章 【MySQL】InnoDB数据页结构
    制作一个简单HTML中华传统文化网页(HTML+CSS)
    QT中的线程池的介绍和使用
    mac 脚本实现APP启动与关闭
    倒置字符串、猜名次、猜凶手、杨辉三角
  • 原文地址:https://blog.csdn.net/XXX_17/article/details/126012976