美文网首页
Android 下实现------蜂鸣提示音和震动

Android 下实现------蜂鸣提示音和震动

作者: 樱花1999 | 来源:发表于2018-12-12 11:22 被阅读0次

    一蜂鸣提示音的实现

        1先准备一个音乐文件beep_once.ogg (该文件名称必须全部小写) 然后放在res-->raw(没有就创建)文件夹下

    2 在Activity的onCreate()方法中注册默认音频通道

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //2为activity注册的默认音频通道。这个一般在onCreate()函数中注册即可

     this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

    }

        3在应用的具体需要该功能的地方,复制如下代码

    //3检查设备的情景模式是不是普通模式

    AudioManager audioService = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

    //   getRingerMode() ——返回当前的铃声模式   RINGER_MODE_NORMAL(普通)

    //  RINGER_MODE_SILENT(静音)   RINGER_MODE_VIBRATE(震动)

    //如果不是普通模式  应用则不发声

    if (AudioManager.RINGER_MODE_NORMAL != audioService.getRingerMode()) {

        //标志位   用于控制声音是否播放

        shouldPlayBeep = false ;

    }

    //4 初始化创建一个MediaPlayer对象

    MediaPlayer mediaPlayer = new MediaPlayer();

    //4.1指定播放的声音通道为 STREAM_MUSIC,这和上面的步骤一致,指向了同一个通道

    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    //5 注册事件  当播放完毕一次后,重新指向流文件的开头,以准备下次播放。

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {

            mp.seekTo(0);

        }

    });

    //6  设定要播放的音乐文件的 数据源,并准备播放

    AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep_once);

    try {

        mediaPlayer.setDataSource(file.getFileDescriptor(),file.getStartOffset(),file.getLength());

        file.close();

        mediaPlayer.setVolume(0.5f,0.5f);

        mediaPlayer.prepare();

    } catch (Exception e) {

        e.printStackTrace();

        mediaPlayer=null;

    }

    // 7.满足条件   开始播放

    if (shouldPlayBeep&&mediaPlayer!=null) {

        mediaPlayer.start();

    }

    二震动功能的实现

        1首先在清单文件中加入震动权限

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

        2获得震动服务并启动

    Vibrator vibrator = (Vibrator) ComAssistantActivity.this.getSystemService(Context.VIBRATOR_SERVICE);

    //震动的时长  ms      

    if (shouldVibrate) {

    //1 只震动一次

        vibrator.vibrate(100);

    //  2循环震动

    //第一个数组参数,指代一个震动的频率数组。每两个数为一组,每组的第一个为等待时间,第二个为震动时间。

    //        比如  [2000,500,100,400],会先等待2000毫秒,震动500,再等待100,震动400

    //第二个int参数,repest指代从 第几个索引(第一个数组参数) 的位置开始循环震动。

    //会一直保持循环,我们需要用 vibrator.cancel()主动终止

    //vibrator.vibrate(new long[]{300,500},0);

    }

    另外:     可以加上两个开关按钮  用来手动控制声音与震动的开关

    tbWarn = (ToggleButton) findViewById(R.id.tb_warn);

    tbWarn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {

                shouldVibrate=true;

            }else {

                shouldVibrate=false;

            }

        }

    });

    tbVoice = (ToggleButton) findViewById(R.id.tb_voice);

    tbVoice.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {

                shouldPlayBeep  =true;

            }else {

                shouldPlayBeep=false;

            }

        }

    }); 

    相关文章

      网友评论

          本文标题:Android 下实现------蜂鸣提示音和震动

          本文链接:https://www.haomeiwen.com/subject/cequhqtx.html