android开发之蜂鸣提示音和震动提示的实现原理与参考代码

最近在读zxing项目,学到了不少东西。推荐大家也读读。里面有个BeepManager类,实现一个蜂鸣音和震动的实现。我们一起来看看他是怎么做的:
蜂鸣
1.准备一个 音频文件 比如:beep.ogg。 ogg格式是声音压缩格式的一种,类似mp3这样。我们准备播放它,就产生了蜂鸣的效果。
2.为activity注册的默认 音频通道 。
  activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
 这里声明为 STREAM_MUSIC的通道,就是多媒体播放,注册后,我们使用 手机上的音量大小键就可以调节播放的声音大小。
如果不设定这个通道的话,我们的这个activity默认音量按钮处理将作用于 手机铃音的大小。
3.检查当前的 铃音模式,或者成为 情景模式。
  说明:getRingerMode() ——返回当前的铃声模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)


代码如下:

  //如果当前是铃音模式,则继续准备下面的 蜂鸣提示音操作,如果是静音或者震动模式。就不要继续了。因为用户选择了无声的模式,我们就也不要出声了。
AudioManager audioService = (AudioManager) activity
.getSystemService(Context.AUDIO_SERVICE);
if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
shouldPlayBeep = false;
}

4.初始化MediaPlayer对象,指定播放的声音 通道为 STREAM_MUSIC,这和上面的步骤一致,指向了同一个通道。  MediaPlayer mediaPlayer = new MediaPlayer();
  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  注册事件。当播放完毕一次后,重新指向流文件的开头,以准备下次播放。


代码如下:

  // When the beep has finished playing, rewind to queue up another one.
mediaPlayer
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
player.seekTo(0);
}
});

设定数据源,并准备播放


代码如下:

AssetFileDescriptor file = activity.getResources().openRawResourceFd(
R.raw.beep);
try {
mediaPlayer.setDataSource(file.getFileDescriptor(),
file.getStartOffset(), file.getLength());
file.close();
mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
mediaPlayer.prepare();
} catch (IOException ioe) {
Log.w(TAG, ioe);
mediaPlayer = null;
}
return mediaPlayer;

5.开始播放


代码如下:

if (playBeep && mediaPlayer != null) {
mediaPlayer.start();
}

-----------------------------------------------------------------
震动
这个比较简单。分两步:
1.声明权限
  在AndroidManifest.xml 里写


代码如下:

  <uses-permission android:name="android.permission.VIBRATE"/>

2.获得震动服务。


代码如下:

  Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);

3.启动震动。


代码如下:

  vibrator.vibrate(VIBRATE_DURATION);

代码如下:

public void playBeepSoundAndVibrate() {
if (enableVibrate) {
Vibrator vibrator = (Vibrator) activity
.getSystemService(Context.VIBRATOR_SERVICE);
//震动一次
vibrator.vibrate(VIBRATE_DURATION);
//第一个参数,指代一个震动的频率数组。每两个为一组,每组的第一个为等待时间,第二个为震动时间。
// 比如 [2000,500,100,400],会先等待2000毫秒,震动500,再等待100,震动400
//第二个参数,repest指代从 第几个索引(第一个数组参数) 的位置开始循环震动。
//会一直保持循环,我们需要用 vibrator.cancel()主动终止
//vibrator.vibrate(new long[]{300,500},0);
}
}

(0)

相关推荐

  • Android实现手机震动效果

    本文实例介绍了Android实现手机震动.抖动效果,分享给大家供大家参考,具体内容如下 (1)布局文件如下 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:la

  • Android震动与提示音实现代码

    本文实例为大家分享了android消息提示的具体代码,供大家参考,具体内容如下 protected AudioManager audioManager; protected Vibrator vibrator; audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); //此方法是由Context调用的 vibrator = (Vibrator)getSystemService(Context.VIBRATOR_S

  • android获取情景模式和铃声 实现震动、铃声提醒

    当我们想通过铃声或者震动提醒用户的时候(类似于手机来电提醒界面),我们需要考虑到手机本身的情景模式.(目前有个OPPO的测试手机就发现,即使调为了静音模式,我依旧可以将铃声播放出来),为了防止"灵异"事件的发生,所以在提示前将情景模式判断以便还是有必要的,特地将代码纪录. 1.获取手机情景模式: AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int ringerMo

  • android 触屏的震动响应接口调用方法

    调用native 方法来开启和关闭vibrator: native static void vibratorOn(long milliseconds); native static void vibratorOff(); 调用方法如下: VibratorService.vibratorOn()

  • Android实现调用震动的方法

    本文实例讲述了Android实现调用震动的方法.分享给大家供大家参考,具体如下: 调用Android系统的震动,只需要一个类 那就是Vibrator ,这个类在hard包中,一看系统级的服务,又要通过manifest.xml文件设置权限了 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/an

  • Android登陆界面实现清除输入框内容和震动效果

    本文为大家分享Android登陆界面实现清除输入框内容和震动效果的全部代码,具体内容如下: 效果图: 主要代码如下 自定义的一个EditText,用于实现有文字的时候显示可以清楚的按钮: import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; import android.uti

  • Android 如何定制vibrator的各种震动模式M 具体方法

    一般振动时间的配置在如下文件: 复制代码 代码如下: frameworks/base/core/res/res/values/config.xml    <!-- 长按振动 -->    <!-- Vibrator pattern for feedback about a long screen/key press -->    <integer-array name="config_longPressVibePattern">        <

  • Android Vibrator调节震动代码实例

    使用Vibrator的vibrate()可调节震动时间:cancel()取消震动. 复制代码 代码如下: <!-震动权限--> <uses-permission android:name="android.permission.VIBRATE"/> //振动器实例化 private Vibrator mVibrator1; mVibrator1=(Vibrator) getApplication().getSystemService(Service.VIBRAT

  • android滑动解锁震动效果的开启和取消

    如果我们需要根据设置中的触摸震动开关来开启和取消滑动解锁的震动效果,就需要做以下修改了. 在LockScreen.java类中的LockScreen方法中的 复制代码 代码如下: else if (mUnlockWidget instanceof MultiWaveView) {            MultiWaveView multiWaveView = (MultiWaveView) mUnlockWidget; multiWaveView.setVibrateEnabled(Setti

  • Android中手机震动的设置(Vibrator)的步骤简要说明

    Android中手机震动的设置(Vibrator)的步骤: a.通过系统服务获得手机震动服务,Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); b.得到震动服务后检测vibrator是否存在: vibrator.hasVibrator(); 检测当前硬件是否有vibrator,如果有返回true,如果没有返回false. c.根据实际需要进行适当的调用, vibrator.vibrate(long millisec

  • Android编程实现手机震动功能的方法

    本文实例讲述了Android编程实现手机震动功能的方法.分享给大家供大家参考,具体如下: 在与用户交互时,常常会用到震动功能,以提醒用户.该功能实现比较简单,请参阅下面主要代码: import android.app.Activity; import android.app.Service; import android.os.Vibrator; public class TipHelper { public static void Vibrate(final Activity activity

  • 浅析Android手机卫士之抖动输入框和手机震动

    查看apiDemos,找到View/Animation/shake找到对应的动画代码,直接拷贝过来 当导入一个项目的时候,报R文件不存在,很多情况是xml文件出错了 Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); et_phone.startAnimation(shake); 动画的xml文件shake.xml android:interpolator="@anim/cycle_7" interpo

随机推荐