Android对于播放音频和视频文件的处理方法很相似,它的区别就在一个调用的是MediaPlayer一个使用用VideoView控件.
一、播放音频
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button button_play; private Button button_pause; private Button button_stop; private MediaPlayer mediaPlayer = new MediaPlayer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button_play = findViewById(R.id.button_play); button_pause = findViewById(R.id.button_pause); button_stop = findViewById(R.id.button_stop); button_play.setOnClickListener(this); button_pause.setOnClickListener(this); button_stop.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); }else { initMediaPlayer(); } } private void initMediaPlayer() { try { File file = new File(Environment.getExternalStorageDirectory(), "music.map3"); mediaPlayer.setDataSource(file.getPath());//指定音频文件的路径 mediaPlayer.prepare();//让MediaPlayer进入到准备状态 } catch (IOException e) { e.printStackTrace(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { initMediaPlayer(); }else { Toast.makeText(this,"拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show(); finish(); } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_play: if (!mediaPlayer.isPlaying()) { mediaPlayer.start();//开始播放 } break; case R.id.button_pause: if (mediaPlayer.isPlaying()) { mediaPlayer.pause();//暂停播放 } break; case R.id.button_stop: if (mediaPlayer.isPlaying()) { mediaPlayer.stop();//停止播放 } break; default: break; } } @Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } }
二、播放视频
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private VideoView videoView; private Button button_play; private Button button_pause; private Button button_replay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); videoView = findViewById(R.id.videoView); button_play = findViewById(R.id.button_play); button_pause = findViewById(R.id.button_pause); button_replay = findViewById(R.id.button_replay); button_play.setOnClickListener(this); button_pause.setOnClickListener(this); button_replay.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); }else { initVideoPath();//初始化VideoView } } private void initVideoPath() { File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4"); videoView.setVideoPath(file.getPath()); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0]== PackageManager. PERMISSION_GRANTED) { initVideoPath(); }else { Toast.makeText(this,"拒绝权限将无法使用",Toast.LENGTH_SHORT).show(); } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_play: videoView.start();//开始播放视频 break; case R.id.button_pause: videoView.pause();//暂停视频 break; case R.id.button_replay: videoView.resume();//重新播放shipin break; default: break; } } @Override protected void onDestroy() { super.onDestroy(); if (videoView != null) { videoView.suspend(); } } }
三、更高级的音频播放(为音频播放设置播放暂停的转换按钮)
public class MainActivity extends AppCompatActivity { Button button1; Button button2; Button button3; private boolean isPause = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = findViewById(R.id.button); button2 = findViewById(R.id.button2); button3 = findViewById(R.id.button3); final MediaPlayer mediaPlayer = new MediaPlayer().create(this, sound); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mediaPlayer.start(); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mediaPlayer.stop(); } }); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mediaPlayer.pause(); } }); final ImageButton imageButton = findViewById(R.id.imageButton); final ImageButton imageButton1 = findViewById(R.id.imageButton2); imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mediaPlayer.isPlaying() && !isPause){ mediaPlayer.pause(); isPause = true; ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.ic_play_circle_outline_black_24dp,null)); }else { mediaPlayer.start(); isPause = false; ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.ic_pause_circle_outline_black_24dp,null)); } } }); imageButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mediaPlayer.stop(); isPause = false; imageButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_play_circle_outline_black_24dp)); } }); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.reset(); try { mediaPlayer.setDataSource(String.valueOf(sound)); mediaPlayer.prepare();//进行预加载 mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } }); } }