android開(kāi)發(fā)之蜂鳴提示音和震動(dòng)提示的實(shí)現(xiàn)原理與參考代碼
更新時(shí)間:2013年01月18日 17:50:14 作者:
蜂鳴提示音和震動(dòng)提示此功能在手機(jī)使用中很實(shí)用,最近在讀zxing項(xiàng)目,學(xué)到了不少東西;我們一起來(lái)看看他是怎么做的,感興趣的朋友可以了解下哦
最近在讀zxing項(xiàng)目,學(xué)到了不少東西。推薦大家也讀讀。里面有個(gè)BeepManager類(lèi),實(shí)現(xiàn)一個(gè)蜂鳴音和震動(dòng)的實(shí)現(xiàn)。我們一起來(lái)看看他是怎么做的:
蜂鳴
1.準(zhǔn)備一個(gè) 音頻文件 比如:beep.ogg。 ogg格式是聲音壓縮格式的一種,類(lèi)似mp3這樣。我們準(zhǔn)備播放它,就產(chǎn)生了蜂鳴的效果。
2.為activity注冊(cè)的默認(rèn) 音頻通道 。
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
這里聲明為 STREAM_MUSIC的通道,就是多媒體播放,注冊(cè)后,我們使用 手機(jī)上的音量大小鍵就可以調(diào)節(jié)播放的聲音大小。
如果不設(shè)定這個(gè)通道的話(huà),我們的這個(gè)activity默認(rèn)音量按鈕處理將作用于 手機(jī)鈴音的大小。
3.檢查當(dāng)前的 鈴音模式,或者成為 情景模式。
說(shuō)明:getRingerMode() ——返回當(dāng)前的鈴聲模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(靜音)、RINGER_MODE_VIBRATE(震動(dòng))
//如果當(dāng)前是鈴音模式,則繼續(xù)準(zhǔn)備下面的 蜂鳴提示音操作,如果是靜音或者震動(dòng)模式。就不要繼續(xù)了。因?yàn)橛脩?hù)選擇了無(wú)聲的模式,我們就也不要出聲了。
AudioManager audioService = (AudioManager) activity
.getSystemService(Context.AUDIO_SERVICE);
if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
shouldPlayBeep = false;
}
4.初始化MediaPlayer對(duì)象,指定播放的聲音 通道為 STREAM_MUSIC,這和上面的步驟一致,指向了同一個(gè)通道。 MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
注冊(cè)事件。當(dāng)播放完畢一次后,重新指向流文件的開(kāi)頭,以準(zhǔn)備下次播放。
// 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)備播放
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.開(kāi)始播放
if (playBeep && mediaPlayer != null) {
mediaPlayer.start();
}
-----------------------------------------------------------------
震動(dòng)
這個(gè)比較簡(jiǎn)單。分兩步:
1.聲明權(quán)限
在A(yíng)ndroidManifest.xml 里寫(xiě)
<uses-permission android:name="android.permission.VIBRATE"/>
2.獲得震動(dòng)服務(wù)。
Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
3.啟動(dòng)震動(dòng)。
vibrator.vibrate(VIBRATE_DURATION);
public void playBeepSoundAndVibrate() {
if (enableVibrate) {
Vibrator vibrator = (Vibrator) activity
.getSystemService(Context.VIBRATOR_SERVICE);
//震動(dòng)一次
vibrator.vibrate(VIBRATE_DURATION);
//第一個(gè)參數(shù),指代一個(gè)震動(dòng)的頻率數(shù)組。每?jī)蓚€(gè)為一組,每組的第一個(gè)為等待時(shí)間,第二個(gè)為震動(dòng)時(shí)間。
// 比如 [2000,500,100,400],會(huì)先等待2000毫秒,震動(dòng)500,再等待100,震動(dòng)400
//第二個(gè)參數(shù),repest指代從 第幾個(gè)索引(第一個(gè)數(shù)組參數(shù)) 的位置開(kāi)始循環(huán)震動(dòng)。
//會(huì)一直保持循環(huán),我們需要用 vibrator.cancel()主動(dòng)終止
//vibrator.vibrate(new long[]{300,500},0);
}
}
蜂鳴
1.準(zhǔn)備一個(gè) 音頻文件 比如:beep.ogg。 ogg格式是聲音壓縮格式的一種,類(lèi)似mp3這樣。我們準(zhǔn)備播放它,就產(chǎn)生了蜂鳴的效果。
2.為activity注冊(cè)的默認(rèn) 音頻通道 。
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
這里聲明為 STREAM_MUSIC的通道,就是多媒體播放,注冊(cè)后,我們使用 手機(jī)上的音量大小鍵就可以調(diào)節(jié)播放的聲音大小。
如果不設(shè)定這個(gè)通道的話(huà),我們的這個(gè)activity默認(rèn)音量按鈕處理將作用于 手機(jī)鈴音的大小。
3.檢查當(dāng)前的 鈴音模式,或者成為 情景模式。
說(shuō)明:getRingerMode() ——返回當(dāng)前的鈴聲模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(靜音)、RINGER_MODE_VIBRATE(震動(dòng))
復(fù)制代碼 代碼如下:
//如果當(dāng)前是鈴音模式,則繼續(xù)準(zhǔn)備下面的 蜂鳴提示音操作,如果是靜音或者震動(dòng)模式。就不要繼續(xù)了。因?yàn)橛脩?hù)選擇了無(wú)聲的模式,我們就也不要出聲了。
AudioManager audioService = (AudioManager) activity
.getSystemService(Context.AUDIO_SERVICE);
if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
shouldPlayBeep = false;
}
4.初始化MediaPlayer對(duì)象,指定播放的聲音 通道為 STREAM_MUSIC,這和上面的步驟一致,指向了同一個(gè)通道。 MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
注冊(cè)事件。當(dāng)播放完畢一次后,重新指向流文件的開(kāi)頭,以準(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.開(kāi)始播放
復(fù)制代碼 代碼如下:
if (playBeep && mediaPlayer != null) {
mediaPlayer.start();
}
-----------------------------------------------------------------
震動(dòng)
這個(gè)比較簡(jiǎn)單。分兩步:
1.聲明權(quán)限
在A(yíng)ndroidManifest.xml 里寫(xiě)
復(fù)制代碼 代碼如下:
<uses-permission android:name="android.permission.VIBRATE"/>
2.獲得震動(dòng)服務(wù)。
復(fù)制代碼 代碼如下:
Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
3.啟動(dòng)震動(dòng)。
復(fù)制代碼 代碼如下:
vibrator.vibrate(VIBRATE_DURATION);
復(fù)制代碼 代碼如下:
public void playBeepSoundAndVibrate() {
if (enableVibrate) {
Vibrator vibrator = (Vibrator) activity
.getSystemService(Context.VIBRATOR_SERVICE);
//震動(dòng)一次
vibrator.vibrate(VIBRATE_DURATION);
//第一個(gè)參數(shù),指代一個(gè)震動(dòng)的頻率數(shù)組。每?jī)蓚€(gè)為一組,每組的第一個(gè)為等待時(shí)間,第二個(gè)為震動(dòng)時(shí)間。
// 比如 [2000,500,100,400],會(huì)先等待2000毫秒,震動(dòng)500,再等待100,震動(dòng)400
//第二個(gè)參數(shù),repest指代從 第幾個(gè)索引(第一個(gè)數(shù)組參數(shù)) 的位置開(kāi)始循環(huán)震動(dòng)。
//會(huì)一直保持循環(huán),我們需要用 vibrator.cancel()主動(dòng)終止
//vibrator.vibrate(new long[]{300,500},0);
}
}
您可能感興趣的文章:
- Android使用Intent的Action和Data屬性實(shí)現(xiàn)點(diǎn)擊按鈕跳轉(zhuǎn)到撥打電話(huà)和發(fā)送短信界面
- android實(shí)現(xiàn)點(diǎn)擊按鈕切換不同的fragment布局
- Android中AlertDialog 點(diǎn)擊按鈕后不關(guān)閉對(duì)話(huà)框的功能
- Android點(diǎn)擊按鈕返回頂部實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)調(diào)用震動(dòng)的方法
- Android中手機(jī)震動(dòng)的設(shè)置(Vibrator)的步驟簡(jiǎn)要說(shuō)明
- Android 如何定制vibrator的各種震動(dòng)模式M 具體方法
- Android 使用Vibrator服務(wù)實(shí)現(xiàn)點(diǎn)擊按鈕帶有震動(dòng)效果
相關(guān)文章
解析android res 運(yùn)行錯(cuò)誤的問(wèn)題
本篇文章是對(duì)android中res運(yùn)行錯(cuò)誤的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Android中EditText屏蔽第三方輸入法表情的方法示例
最近在工作終于遇到一個(gè)問(wèn)題,因?yàn)榈谌捷斎敕ū砬榈膯?wèn)題導(dǎo)致Android中TextView的內(nèi)容顯示異常,只能想辦法解決了,下面這篇文章主要記錄了在處理Android中EditText屏蔽第三方輸入法表情的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01
Android Socket服務(wù)端與客戶(hù)端用字符串的方式互相傳遞圖片的方法
這篇文章主要介紹了Android Socket服務(wù)端與客戶(hù)端用字符串的方式互相傳遞圖片的方法的相關(guān)資料,需要的朋友可以參考下2016-05-05
Android應(yīng)用中制作選中后圖標(biāo)變大浮動(dòng)效果的代碼分享
這篇文章主要介紹了Android應(yīng)用中制作選中后圖標(biāo)變大浮動(dòng)效果的代碼分享,這里作者舉了一個(gè)體育賽事app的例子,需要的朋友可以參考下2016-02-02
Android實(shí)現(xiàn)彩信附件的添加與刪除功能
這篇文章主要介紹了Android實(shí)現(xiàn)彩信附件的添加與刪除功能,涉及Android針對(duì)常見(jiàn)多媒體文件的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06

