android软件提示音一般使用的是SoundPool以及MediaPlayer方式进行提示。下面是自己在开放中使用到的一个提示音工具类,可根据自己需要进行选择提示音播放方式(如有不对之处还请指教)。下面上代码(工具类可直接复制,不依赖于任何环境,工具类可在(Android提示音工具类)下载,密码:34di。

1.记得在AndroidManifest.xml中配置权限:

<!-- 调用系统震动 -->
	<uses-permission android:name="android.permission.VIBRATE">
	 <!-- 允许程序写入外部存储 -->
	 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
</uses-permission></uses-permission>

2.下面是java代码:

import java.io.IOException;
	import java.util.HashMap;
	import java.util.Map;
	
	import android.annotation.SuppressLint;
	import android.content.Context;
	import android.content.res.AssetFileDescriptor;
	import android.media.AudioManager;
	import android.media.MediaPlayer;
	import android.media.MediaPlayer.OnBufferingUpdateListener;
	import android.media.MediaPlayer.OnPreparedListener;
	import android.media.SoundPool;
	import android.os.Vibrator;
	import android.content.SharedPreferences;
	
	/**
	 * 声音配置工具类
	 * (1)soundPool适合播放一些小音乐,文件最大不超过1M.
	 * (2)MediaPlayer耗用比较大,一般操作大的文件.
	 * @author yzy
	 *
	 */
	public class SoundConfigUtils implements     OnBufferingUpdateListener,OnPreparedListener{
	
		private static SoundConfigUtils soundConfigUtils;//单例化
		private Context context;
		public static final String SOUND_SHARE = "sound_share";
		SharedPreferences sharedPreferUtil=null;//保存声音设置的share
		public static SoundConfigUtils getInstance(Context context){
			if(soundConfigUtils==null){
		       soundConfigUtils=new SoundConfigUtils(context);
			}
			return soundConfigUtils;
		}
		private SoundConfigUtils(Context context) {
			super();
			this.context = context;
			sharedPreferUtil=context.getSharedPreferences(SOUND_SHARE ,Context.MODE_PRIVATE);
		}
	
		//播放声音的类型,可通过此枚举来控制不同的声音
		public enum MusicType{
			NEW_VISTOR,NEW_MSG
		}
		
	    /**
		 * 播放声音
		 */
		@SuppressWarnings("deprecation")
		public void startSound(final MusicType musicType){
			boolean musicFlag=sharedPreferUtil.getBoolean(Contants.MUSIC_FLAG, true);//是否播放音乐
			AudioManager audioManager=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);   
			//系统声音管理类
			Vibrator vibrator=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);   //震动服务
			long[] pattern={100,400,100,400};         //震动的频率,100表示等待时间,400表示震动时间   
	                               //(1)vibrator.vibrate(pattern,-1); 表示不重复,只震动一个循环;vibrator.vibrate(pattern,0);表示持续震动
							 //(2)vibrator.vibrate(pattern,1),表示从下标为1的开始重复震动 ;
					          //(3)vibrator.vibrate(1000),表示震动多少秒
			switch (audioManager.getRingerMode()) {    //获取系统设置模式
			 //静音
			case AudioManager.RINGER_MODE_SILENT:      
				break;
			 //常规模式 两种情况:1.响铃不震动 2.响铃+震动
			case AudioManager.RINGER_MODE_NORMAL:     
				int flag=0;  //类型标志 0 响铃以及震动 1响铃但是不震动 2.只在静音模式下震动
				//判断系统设置的震动类型
		if(audioManager.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER)==
		AudioManager.VIBRATE_SETTING_OFF){  //不震动
					flag=1;
	}else if(audioManager.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER)AudioManager.VIBRATE_SETTING_ONLY_SILENT){//只在静音时,震动
						flag=2;
					}else{  //震动
						flag=0;
					}
					if(musicFlag){    //允许音乐的话
						new Thread(){
							@Override
							public void run() {
								//soundPool播放
								initSoundPool();
								try {
									Thread.sleep(1000);   //线程休眠1秒,为系统加载音乐资源文件
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
								playSound(musicType.ordinal(), 0);//播放音乐
								//MediaPlayer播放
								//	playMediaPlayer(1);					    
			//playUrlMediaPlayer("http://sc1.111ttt.com/2016/5/01/14/194141533184.mp3");
							}
						}.start();
					}
					if(flag==0){
						vibrator.vibrate(pattern,-1);          //震动一次 
					}
					break;  
			   	//震动
				case AudioManager.RINGER_MODE_VIBRATE:    
					vibrator.vibrate(pattern,-1);         //震动一次
					break;
				default:
					break;
				}
			}
		
		/**
		 * soundPool提示音效
		 * (1)初始化播放音频的组件
		 * (2)初始化播放音效列表(HashMap=(ID,Sp.load(...))
		 * (3)获取系统声音设置(设置左右音道)
		 * (4)play
		 */
		private SoundPool sp;
		private Map<integer integer=""> sources=null;
		private int streamId=0;
		
		/**
		 * 初始化音频
		 */
		@SuppressLint("UseSparseArrays") private void initSoundPool(){
			sp=new SoundPool(5, AudioManager.STREAM_MUSIC, 100);  //(最多同时播放的音乐,音频的类型,品质)
			sources=new HashMap<integer integer="">(); 
			//sources.put(0, sp.load(context, R.raw.tip_01, 1)); 
			//sp.load(上下文,资源,优先级);  加载资源需要充足的时间,可使线程休眠,加载铃声
			//sources.put(1, sp.load(context, R.raw.tip_02, 1)); //sp.load(上下文,资源,优先级);
			try {
				sources.put(0, sp.load(context.getAssets().openFd("music/enter.mp3"),1)); 
				sources.put(1, sp.load(context.getAssets().openFd("music/msg.mp3"),1));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	
		/**
		 * 播放音效
		 * @param id
		 * @param loop
		 */
		private void playSound(int id,int loop){
			AudioManager audioManager=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);  
			 //系统声音管理类
			float currentSound=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);               	
	//当前音量
	 //加载资源id(sp.load(...)的返回值,0表示加载失败)
	 //左声道,右声道,优先级,循环次数(0,播放一次,-1无限次,其他播放loop+1)
	//播放速率(0.5f-2.0f,1.0f表示正常,2.0f表示两倍速率) 
	//返回值为streamId可作为之后的pause,stop的参数
		}
	    
		/**
		 * 关闭声音
		 */
		public void stopSound(){
			if(sp!=null){
				if(streamId!=0){
					sp.stop(streamId);
				}
			}
		}
	
		
		
		
		/**
		 * mediaplay提示音效
		 * 常用方法:
		 * reset():相当于重新实例化reset
		 * start(),pasue(),stop()
		 * prepare():缓冲
		 * isPlaying():是否在播放
		 * seekTo(position):从指定的位置开始播放
		 * release():销毁
		 * setDataSource(file,startOffset,length)|(string):设置media的音乐源
		 */
		private MediaPlayer mediaPlayer;
		
		/**
		 * 播放mediaplayer
		 * playTypeId 播放media不同的方式
		 */
		private void playMediaPlayer(int playTypeId){
			switch (playTypeId) {
			//直接读取raw中的文件
			case 0:{
				//mediaPlayer=MediaPlayer.create(context, R.raw.tip_02);
				//mediaPlayer.start();
				break;
			}
	//读取Assert中的音乐文件 1.初始化AssetFileDescriptor 2.设置setDataSource 3.缓冲 4.开始播放
				case 1:{
					try {
						AssetFileDescriptor assetFileDescriptor=context.getAssets().openFd("music/tip_03.mp3");
						mediaPlayer=new MediaPlayer();
						mediaPlayer.setOnPreparedListener(this);
						mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),
								assetFileDescriptor.getStartOffset(),
								assetFileDescriptor.getLength());    //设置播放源(数据源,开始点,总长度)
						mediaPlayer.prepare();       				    //缓冲
					} catch (IOException e) {
					
					e.printStackTrace();
				}
				break;
			}
			//播放手机目录中的音乐
			case 2:{
				try {
					mediaPlayer=new MediaPlayer();
					mediaPlayer.setDataSource("");     //可以直接设置数据源的目录,此目录为手机上的目录
					mediaPlayer.prepare();
					mediaPlayer.start();
				} catch (IllegalArgumentException e) {
					
					e.printStackTrace();
				} catch (SecurityException e) {
					
					e.printStackTrace();
				} catch (IllegalStateException e) {
					
					e.printStackTrace();
				} catch (IOException e) {
					
					e.printStackTrace();
				}         
				break;
			}
			default:
				break;
			}
			//		mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
			//			@Override
			//			public void onCompletion(MediaPlayer mp) {
			//				
			//				mp.stop();
			//			}
			//		});
		}
	    
		/**
		 * 停止播放
		 */
		private void stopMediaPlayer(){
			if(mediaPlayer!=null){
				if(mediaPlayer.isPlaying()){
					mediaPlayer.stop();
				}
				mediaPlayer.release();
				mediaPlayer=null;
			}
		}
	
		/**
		 * 播放网络音乐
		 */
	    public void playUrlMediaPlayer(String mediaUrl){
	    	mediaPlayer=new MediaPlayer();
	    	try {
	    		mediaPlayer.setOnPreparedListener(this);
				mediaPlayer.setDataSource(mediaUrl);
				mediaPlayer.prepare();
			} catch (IllegalArgumentException e) {
				
				e.printStackTrace();
			} catch (SecurityException e) {
				
				e.printStackTrace();
			} catch (IllegalStateException e) {
				
				e.printStackTrace();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
	    }
	
	    /**
	     * 播放进度
	     */
		@Override
		public void onBufferingUpdate(MediaPlayer mp, int percent) {
			//TODO: 可处理播放过程中要做的时
		}
	
		/**
		 * 缓冲完执行的代码
		 */
		@Override
		public void onPrepared(MediaPlayer mp) {
			mp.start();
		}
	}
</integer></integer>