a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統(tǒng) > Android > 正文

android開發(fā)之蜂鳴提示音和震動提示的實(shí)現(xiàn)原理與參考代碼

2020-04-11 12:33:58
字體:
供稿:網(wǎng)友
最近在讀zxing項(xiàng)目,學(xué)到了不少東西。推薦大家也讀讀。里面有個(gè)BeepManager類,實(shí)現(xiàn)一個(gè)蜂鳴音和震動的實(shí)現(xiàn)。我們一起來看看他是怎么做的:
蜂鳴
1.準(zhǔn)備一個(gè) 音頻文件 比如:beep.ogg。 ogg格式是聲音壓縮格式的一種,類似mp3這樣。我們準(zhǔn)備播放它,就產(chǎn)生了蜂鳴的效果。
2.為activity注冊的默認(rèn) 音頻通道 。
  activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
 這里聲明為 STREAM_MUSIC的通道,就是多媒體播放,注冊后,我們使用 手機(jī)上的音量大小鍵就可以調(diào)節(jié)播放的聲音大小。
如果不設(shè)定這個(gè)通道的話,我們的這個(gè)activity默認(rèn)音量按鈕處理將作用于 手機(jī)鈴音的大小。
3.檢查當(dāng)前的 鈴音模式,或者成為 情景模式。
  說明:getRingerMode() ――返回當(dāng)前的鈴聲模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(靜音)、RINGER_MODE_VIBRATE(震動)
復(fù)制代碼 代碼如下:

  //如果當(dāng)前是鈴音模式,則繼續(xù)準(zhǔn)備下面的 蜂鳴提示音操作,如果是靜音或者震動模式。就不要繼續(xù)了。因?yàn)橛脩暨x擇了無聲的模式,我們就也不要出聲了。
AudioManager audioService = (AudioManager) activity
.getSystemService(Context.AUDIO_SERVICE);
if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
shouldPlayBeep = false;
}

4.初始化MediaPlayer對象,指定播放的聲音 通道為 STREAM_MUSIC,這和上面的步驟一致,指向了同一個(gè)通道。  MediaPlayer mediaPlayer = new MediaPlayer();
  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  注冊事件。當(dāng)播放完畢一次后,重新指向流文件的開頭,以準(zhǔn)備下次播放。
復(fù)制代碼 代碼如下:

  // 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);
}
});

設(shè)定數(shù)據(jù)源,并準(zhǔn)備播放
復(fù)制代碼 代碼如下:

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.開始播放
復(fù)制代碼 代碼如下:

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

-----------------------------------------------------------------
震動
這個(gè)比較簡單。分兩步:
1.聲明權(quán)限
  在AndroidManifest.xml 里寫
復(fù)制代碼 代碼如下:

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

2.獲得震動服務(wù)。
復(fù)制代碼 代碼如下:

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

3.啟動震動。
復(fù)制代碼 代碼如下:

  vibrator.vibrate(VIBRATE_DURATION);

復(fù)制代碼 代碼如下:

public void playBeepSoundAndVibrate() {
if (enableVibrate) {
Vibrator vibrator = (Vibrator) activity
.getSystemService(Context.VIBRATOR_SERVICE);
//震動一次
vibrator.vibrate(VIBRATE_DURATION);
//第一個(gè)參數(shù),指代一個(gè)震動的頻率數(shù)組。每兩個(gè)為一組,每組的第一個(gè)為等待時(shí)間,第二個(gè)為震動時(shí)間。
// 比如 [2000,500,100,400],會先等待2000毫秒,震動500,再等待100,震動400
//第二個(gè)參數(shù),repest指代從 第幾個(gè)索引(第一個(gè)數(shù)組參數(shù)) 的位置開始循環(huán)震動。
//會一直保持循環(huán),我們需要用 vibrator.cancel()主動終止
//vibrator.vibrate(new long[]{300,500},0);
}
}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人99 | 精品一区在线 | 精品久久久久久久久久久久 | 久久国产欧美日韩精品 | 福利社午夜影院 | 成人夜晚看av| 日本在线观看免费 | 中文字幕高清在线 | 久久久久久久久久一本门道91 | 日韩色av | 国产日产一区二区三区久久久久久 | 成人欧美一区二区三区在线播放 | 国产九九九精品视频 | 精品中文在线 | 久久亚洲春色中文字幕久久久 | 久久久久久一区 | 高清成人在线 | 欧美视频在线免费看 | 欧美在线网站 | 亚洲区在线 | 黄色片免费在线 | 操久久| 北条麻妃国产九九九精品小说 | 一区二区精品 | 国产在线一区二区三区 | 久久久国产精品入口麻豆 | 亚洲欧美中文日韩v在线观看 | 精品毛片在线 | 久久综合狠狠综合久久综合88 | 日本一区视频在线观看 | 日韩欧美精品在线 | 日韩高清国产一区在线 | 九九色综合 | 天天干 夜夜操 | 国产精品久久久久久久久久久久久久 | 特级毛片 | 91在线精品视频 | 欧美在线一区二区三区 | 日本一区二区在线播放 | 国产精品久久久精品 | 欧美日韩视频在线观看一区 |