android:使用mediaplayer播放res/raw文件夹中的音乐

(1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面




(2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本控件,用于提示当前播放状态和 播放暂停 停止等功能。具体代码如下

[java]  view plain  copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <TextView  
  7.         android:id="@+id/hint"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="单击播放开始播放音乐" />  
  11.   
  12.     <LinearLayout  
  13.         android:orientation="horizontal"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="wrap_content" >  
  16.           
  17.      <Button  
  18.         android:id="@+id/button1"  
  19.         android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content"  
  21.         android:text="播放" />  
  22.   
  23.     <Button  
  24.         android:id="@+id/button2"  
  25.         android:layout_width="wrap_content"  
  26.         android:layout_height="wrap_content"  
  27.         android:text="暂停" />  
  28.   
  29.     <Button  
  30.         android:id="@+id/button3"  
  31.         android:layout_width="wrap_content"  
  32.         android:layout_height="wrap_content"  
  33.         android:text="停止" />  
  34.     </LinearLayout>  
  35.   
  36. </LinearLayout>  
(3)打开MainActivity 在该类中,定义所需的成员变量,具体代码如下

[java]  view plain  copy
  1. private MediaPlayer mp;//mediaPlayer对象  
  2. private Button play,pause,stop;//播放 暂停/继续 停止 按钮  
  3. private TextView hint;//显示当前播放状态  
  4. private boolean isPause=false;//是否暂停  
(4)在onCreate()方法中,获取播放 暂停/继续 停止 按钮 提示当前状态的文本框,并为mediaplayer对象创建播放的对象,具体代码如下。

[java]  view plain  copy
  1. play=(Button) findViewById(R.id.button1);  
  2. pause=(Button) findViewById(R.id.button2);  
  3. stop=(Button) findViewById(R.id.button3);  
  4. hint=(TextView) findViewById(R.id.hint);  
  5. hint.setTextSize(20);  
  6. mp=MediaPlayer.create(MainActivity.this, R.raw.sound);//创建mediaplayer对象  
(5)编写用于播放音乐的无返回值的play()方法。在该方法中首先调用mediaplayer对象的reset()方法重置mediaplayer对象,然后重新为其设置要播放的音频文件。最后调用start()方法开始播放音频

[java]  view plain  copy
  1. private void play(){  
  2.     try{  
  3.         mp.reset();  
  4.         mp=MediaPlayer.create(MainActivity.this, R.raw.sound);//重新设置要播放的音频  
  5.         mp.start();//开始播放  
  6.         hint.setText("正在播放音频...");  
  7.         play.setEnabled(false);  
  8.         pause.setEnabled(true);  
  9.         stop.setEnabled(true);  
  10.     }catch(Exception e){  
  11.         e.printStackTrace();//输出异常信息  
  12.     }  
  13. }  
(6)为mediaplayer对象添加完成时间监听器,用于当音乐播放完毕后重新开始播放音乐

[java]  view plain  copy
  1. mp.setOnCompletionListener(new OnCompletionListener() {  
  2.               
  3.             @Override  
  4.             public void onCompletion(MediaPlayer arg0) {  
  5.                 // TODO Auto-generated method stub  
  6.                 play();//重新开始播放  
  7.             }  
  8.         });  
(7)为播放按钮添加单击事件监听器

[java]  view plain  copy
  1. play.setOnClickListener(new OnClickListener() {  
  2.           
  3.         @Override  
  4.         public void onClick(View v) {  
  5.             // TODO Auto-generated method stub  
  6.             play();  
  7.             if(isPause){  
  8.                 pause.setText("暂停");  
  9.                 isPause=false;  
  10.             }  
  11.         }  
  12.     });  

(8)为暂停按钮添加单击事件监听器

[java]  view plain  copy
  1. pause.setOnClickListener(new OnClickListener() {  
  2.               
  3.             @Override  
  4.             public void onClick(View v) {  
  5.                 // TODO Auto-generated method stub  
  6.                 if(mp.isPlaying()&&!isPause){  
  7.                     mp.pause();  
  8.                     isPause=true;  
  9.                     pause.setText("继续");  
  10.                     hint.setText("暂停播放音频...");  
  11.                     play.setEnabled(true);  
  12.                 }else{  
  13.                     mp.start();  
  14.                     pause.setText("暂停");  
  15.                     hint.setText("继续播放音频...");  
  16.                     isPause=false;  
  17.                     play.setEnabled(false);  
  18.                 }  
  19.             }  
  20.         });  
(9)为停止按钮添加单击事件监听器

[java]  view plain  copy
  1. stop.setOnClickListener(new OnClickListener() {  
  2.               
  3.             @Override  
  4.             public void onClick(View v) {  
  5.                 // TODO Auto-generated method stub  
  6.                 mp.stop();  
  7.                 hint.setText("停止播放音频...");  
  8.                 pause.setEnabled(false);  
  9.                 stop.setEnabled(false);  
  10.                 play.setEnabled(true);  
  11.             }  
  12.         });  

(10)一定要记得这个。重写Activity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的音频,并释放mediaplayer所占用的资源,否则你每打开一次就会播放一次,并且上次播放的不会停止 你可以试试的,我解释不清楚

[java]  view plain  copy
  1. protected void onDestroy() {  
  2.     // TODO Auto-generated method stub  
  3.     if(mp.isPlaying()){  
  4.         mp.stop();  
  5.     }  
  6.     mp.release();//释放资源  
  7.     super.onDestroy();  
  8. }  

//权限和依赖自己加

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

 implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.13'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'com.google.dagger:dagger:2.8'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.7'
    implementation 'com.facebook.fresco:fresco:0.12.0'
// 支持 GIF 动图,需要添加
    implementation 'com.facebook.fresco:animated-gif:0.12.0'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.github.bumptech.glide:glide:4.7.1'
    implementation 'com.amap.api:map2d:5.2.0'
    implementation 'com.amap.api:location:4.0.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

猜你喜欢

转载自blog.csdn.net/zhang1223665986/article/details/80481290
今日推荐