您的位置:首页 > 移动开发

安卓开发之WebView,进度条ProgressBar以及MediaPlayer和SonundPool的使用

2018-06-07 15:48 211 查看




安卓开发之WebView,进度条ProgressBar以及MediaPlayer和SonundPool的使用





2018年06月06日 15:04:21

阅读数:106







      内容比较简单,仅用作笔记,所以就不过多解释,有一些地方代码思路不是很清晰,有点乱,日后会进行修改的。


1、新建一个SoundPool管理器,实现soundpool的创建,加载以及播放音频等功能

[java] view plain copy print?
  1. package com.example.myexplorer;  
  2. import java.util.Random;  
  3.   
  4. import android.annotation.SuppressLint;  
  5. import android.content.Context;  
  6. import android.media.AudioAttributes;  
  7. import android.media.SoundPool;  
  8. import android.media.SoundPool.OnLoadCompleteListener;  
  9. import android.os.Build;  
  10. import android.os.Handler;  
  11. import android.os.Message;  
  12. import android.util.Log;  
  13. import android.util.SparseArray;  
  14.   
  15. public class SoundPoolManager implements OnLoadCompleteListener{  
  16.     Context context;  
  17.     SoundPool soundPool;  
  18.     MyHandler myHandler;  
  19.     private final int SOUND_LOAD_OK=1;  
  20.     //创建一个SpareseArray对象来存放管理音频资源  
  21.     private SparseArray<Object> soundMap=new SparseArray<>();   
  22.     //实现构造函数,传递context  
  23.     public SoundPoolManager(Context context) {  
  24.         // TODO Auto-generated constructor stub  
  25.         this.context=context;  
  26.     }  
  27.       
  28.       
  29.   创建一个SoundPool池,回调时需要指定创建的池的最大可容纳数量,声音类型以及音频品质 
  30.  /  
  31.     @SuppressLint(“NewApi”)  
  32.     @SuppressWarnings(“deprecation”)  
  33.     protected void creatSounPool(int maxStreams,int streamType,int srcQuality) {  
  34.         if(Build.VERSION.SDK_INT>=21) {                                  //判断为安卓5以上时使用该方法创建,否则5.0以上系统不会播放  
  35.             AudioAttributes abs = new AudioAttributes.Builder()  
  36.                     .setUsage(AudioAttributes.USAGE_MEDIA)  
  37.                     .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)  
  38.                     .build() ;  
  39.             soundPool=new SoundPool.Builder()  
  40.                     .setMaxStreams(5)  
  41.                     .setAudioAttributes(abs)  
  42.                     .build();   //创建一个SoundPool对象,该对象可以容纳5个音频流  
  43.             }  
  44.         else  
  45.             soundPool=new SoundPool(maxStreams,streamType,srcQuality);   //安卓5以下的soundpool创建方法  
  46.         Log.i(”SoundPoolCreat”,“successfull”);  
  47.     }  
  48.     / 
  49.       加载资源到创建好的SoundPool里面,需要提供音频资源名称以及优先级 
  50.      /  
  51.     protected void load(String[] ResourcesName,int priority) {  
  52.         for(int i=0;i<ResourcesName.length;i++) {  
  53.         soundMap.put(i,soundPool.load(context,context.getResources().  
  54.                 getIdentifier(”com.example.myexplorer:raw/”+ResourcesName[i]  
  55.                         ,null,null) ,priority));  
  56.         Log.i(”SoundPoolLoad”+i,“successfull”);  
  57.         }  
  58.         soundPool.setOnLoadCompleteListener(this);  
  59.           
  60.     }  
  61.     / 
  62.       开始播放,要求提供左声道音量leftVolume,右声道音量rightVolume,播放优先级priority,是否循环loop(0为不循环,1为循环) 
  63.       播放速率rate 
  64.      /  
  65.     protected void play(float leftVolume,  
  66.             float rightVolume,int priority,int loop,float rate) {  
  67.         int i=0;  
  68.       
  69.         //随机播放加载的三个背景音乐  
  70.             soundPool.play((int)soundMap.get((int)(new Random().nextInt(3))),  //产生等概率0-2的随机数  
  71.                     leftVolume, rightVolume, priority, loop, rate);  
  72.         Log.i(”SoundPoolPlay”+(i++),“successfull”);  
  73.     }  
  74.     / 
  75.       设置加载完成监听,防止未加载完成就播放 
  76.      */  
  77.     @SuppressLint(“HandlerLeak”)  
  78.     @Override  
  79.     public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {  
  80.           
  81.         // TODO Auto-generated method stub  
  82.         Log.i(”Load”,“Complete”);  
  83.         myHandler=new MyHandler();  
  84.         Message message=myHandler.obtainMessage();  
  85.         message.what=SOUND_LOAD_OK;  
  86.         myHandler.sendMessage(message);  
  87.     }  
  88.     @SuppressLint(“HandlerLeak”)  
  89.     public class MyHandler extends Handler{  
  90.   
  91.         private final int SOUND_LOAD_OK=1;  
  92.         @Override  
  93.         public void handleMessage(Message msg) {  
  94.             switch (msg.what) {  
  95.             case SOUND_LOAD_OK:  
  96.                 //这里添加加载完成后需要做的事  
  97.                 //play(1, 1, 0, 0, 1);  
  98.                 break;  
  99.             default:  
  100.                 break;  
  101.             }  
  102.         }  
  103.     }  
  104. }  
package com.example.myexplorer; 
import java.util.Random;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐