src\ MainActivity.java

package com.example.soundpoolandvirator;import java.util.HashMap;import android.media.AudioManager;import android.media.SoundPool;import android.os.Bundle;import android.os.Vibrator;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {Button bRingStart;Button bRingPause;//震动Button bVStart;Button bVStop;Button bVForever;private Vibrator vibrator;//振动器private SoundPool sp;private HashMap<Integer, Integer> spMap;/** *  震动模式(强度) *  {100,400,100,400} 停止 开启 停止 开启 */public static final long[] PATTERN_1 =  {100,400,100,400};public static final long[] PATTERN_2 =  {100,700,100,700};public static final long[] PATTERN_3 =  {300,900,300,900};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initWidget();initSoundPool();// 点击监听bRingStart.setOnClickListener(this);bRingPause.setOnClickListener(this);bVStart.setOnClickListener(this);bVStop.setOnClickListener(this);bVForever.setOnClickListener(this);}private void initWidget() {bRingStart = (Button) findViewById(R.id.bstart);bRingPause = (Button) findViewById(R.id.bpause);bVStart = (Button) findViewById(R.id.but_on_vibrate);bVStop = (Button) findViewById(R.id.but_off_vibrate);bVForever = (Button) findViewById(R.id.but_forever_vibrate);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View v) {int viewID = v.getId();switch (viewID) {//播放音效case R.id.bstart:playSounds(1, 1);break;//暂停声音case R.id.bpause:sp.pause(spMap.get(1));break;case R.id.but_on_vibrate:openVibrate(PATTERN_3, -1);break;case R.id.but_off_vibrate:stopVibrate();break;case R.id.but_forever_vibrate:openVibrate(PATTERN_2, 2);break;default:break;}}/** * 初始化SoundPool */@SuppressLint("UseSparseArrays")private void initSoundPool() {sp = new SoundPool(2, AudioManager.STREAM_MUSIC, 5);spMap = new HashMap<Integer, Integer>();spMap.put(1, sp.load(this, R.raw.water, 1));}/** * 播放音频 *  * @param sound *            加载的音频(spMap中的key) * @param number *            循环次数 (0 = no loop, -1 = loop forever) */public void playSounds(int sound, int number) {AudioManager am = (AudioManager) this.getSystemService(MainActivity.AUDIO_SERVICE);float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);float volumnRatio = audioCurrentVolumn / audioMaxVolumn;sp.play(spMap.get(sound), volumnRatio / 2, volumnRatio / 2, 1, number,1);}/** * 打开 手机震动 * 震动大小可以通过改变pattern来设定,如果开启时间太短,震动效果可能感觉不到  * @param pattern 模式 {100,400,100,400};   // 停止 开启 停止 开启 * @param repeat  重复次数 */public void openVibrate(long[] pattern , int repeat){vibrator =  (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);vibrator.vibrate(pattern, repeat);}/** * 取消震动 */public void stopVibrate(){vibrator.cancel();}}

res\layout\ activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <Button        android:id="@+id/bstart"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:layout_marginLeft="24dp"        android:layout_marginTop="14dp"        android:text=" 播放" />    <Button        android:id="@+id/but_on_vibrate"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/bstart"        android:layout_below="@+id/bstart"        android:layout_marginTop="28dp"        android:text="打开震动" />    <Button        android:id="@+id/bpause"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBaseline="@+id/bstart"        android:layout_alignBottom="@+id/bstart"        android:layout_alignParentRight="true"        android:layout_marginRight="54dp"        android:text="暂停" />    <Button        android:id="@+id/but_off_vibrate"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBottom="@+id/but_on_vibrate"        android:layout_alignLeft="@+id/bpause"        android:text="关闭震动" />    <Button        android:id="@+id/but_forever_vibrate"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/but_on_vibrate"        android:layout_below="@+id/but_on_vibrate"        android:layout_marginTop="36dp"        android:text="永久震动" /></RelativeLayout>

音效文件

res\rew 点击打开链接(提取码:24ad)


更多相关文章

  1. android 音效处理 (2)
  2. Android 振动器(Vibrator)系统
  3. android 音效处理(1)
  4. Android 振动器解析
  5. android的振动器Vibrator
  6. android mediaplayer 音效 代码

随机推荐

  1. Android的优点和不足之处
  2. Android 自定义跑马灯 实现超长文本,滚动
  3. 【Android】使用Intent调用系统其它程序,
  4. 2019 年终总结,240+篇,已分类整理
  5. APP如何适配不同的Android版本
  6. 图解Android启动模式,看完这一篇就真相大
  7. Android定位相关
  8. 学习android上3D-opengl的一个不错的起点
  9. Android Animation动画实战(一): 从布局动画
  10. android/ios 手机移动开发(电子菜谱、健