Android實(shí)現(xiàn)監(jiān)聽音量的變化
本文實(shí)例為大家分享了Android實(shí)現(xiàn)監(jiān)聽音量變化的具體代碼,供大家參考,具體內(nèi)容如下
最近項(xiàng)目中涉及到了音量監(jiān)聽然后作出改變的需求,特此mark一下
想監(jiān)聽音量的變化通用的就兩種方法:
1、監(jiān)聽音量鍵的變化
方法: 重寫 activity onKeyDown函數(shù)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
//音量鍵up
return false;
case KeyEvent.KEYCODE_VOLUME_DOWN:
//音量鍵down
return false;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
優(yōu)點(diǎn): 快速,方便,簡(jiǎn)單
缺點(diǎn):
1. 容易消耗音量鍵改變事件(返回false有時(shí)也沒(méi)用),實(shí)測(cè)
2. 該監(jiān)聽針對(duì)當(dāng)前Activity,不同的Ac要重新重寫onKeyDown函數(shù)
3. 由第二點(diǎn)可知,無(wú)法做到整個(gè)應(yīng)用范圍監(jiān)聽
2、獲取音量變化的廣播
系統(tǒng)音量變化的時(shí)候會(huì)發(fā)送廣播,監(jiān)聽這個(gè)就行,音量變化的action是
android.media.VOLUME_CHANGED_ACTION
具體的見代碼:(kotlin版本)
class VolumeChangeHelper(var context: Context){
private var mVolumeBroadCastReceiver: VolumeBroadCastReceiver? = null
private var mVolumeChangeListener: VolumeChangeListener? = null
companion object{
const val VOLUME_CHANGE_ACTION = "android.media.VOLUME_CHANGED_ACTION"
const val EXTRA_VOLUME_STREAM_TYPE = "android.media.EXTRA_VOLUME_STREAM_TYPE"
}
private var audioManager: AudioManager? = context.getSystemService(Context.AUDIO_SERVICE) as? AudioManager
fun registerVolumeChangeListener(volumeChangeListener: VolumeChangeListener){
mVolumeChangeListener = volumeChangeListener
mVolumeBroadCastReceiver = VolumeBroadCastReceiver()
val filter = IntentFilter()
filter.addAction(VOLUME_CHANGE_ACTION)
if(mVolumeBroadCastReceiver != null){
//注冊(cè)這個(gè)廣播
context.registerReceiver(mVolumeBroadCastReceiver!!, filter)
}
}
fun unregisterReceiver(){
if(mVolumeBroadCastReceiver != null){
context.unregisterReceiver(mVolumeBroadCastReceiver!!)
mVolumeBroadCastReceiver = null
}
}
interface VolumeChangeListener{
fun onVolumeDownToMin()
fun onVolumeUp()
}
//定義一個(gè)想監(jiān)聽音量變化的廣播接受者
inner class VolumeBroadCastReceiver : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
if(intent?.action == VOLUME_CHANGE_ACTION && intent?.getIntExtra(EXTRA_VOLUME_STREAM_TYPE, -1) == AudioManager.STREAM_MUSIC){
val currentVolume = audioManager?.getStreamVolume(AudioManager.STREAM_MUSIC) ?: -1
if(currentVolume > 0){
mVolumeChangeListener?.onVolumeUp()
} else if( currentVolume == 0){
mVolumeChangeListener?.onVolumeDownToMin()
}
}
}
}
}
想實(shí)現(xiàn)全局監(jiān)聽的話,可以在在一個(gè)app生命周期內(nèi)都存在的Context里去監(jiān)聽,比如MainActivity
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程實(shí)現(xiàn)讀取本地SD卡圖片的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)讀取本地SD卡圖片的方法,涉及Android針對(duì)文件讀取及判定操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
在Android上實(shí)現(xiàn)HttpServer的示例代碼
本篇文章主要介紹了在Android上實(shí)現(xiàn)HttpServer的示例代碼,實(shí)現(xiàn)Android本地的微型服務(wù)器,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Android UI實(shí)時(shí)預(yù)覽和編寫的各種技巧
大家好,今天給大家分享的是Android中實(shí)時(shí)預(yù)覽UI和編寫UI的各種技巧,2015-11-11
Android應(yīng)用接入微信分享的實(shí)例代碼
本篇文章主要介紹了Android應(yīng)用接入微信分享的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-07-07
Android實(shí)現(xiàn)截圖分享qq 微信功能
在日常生活中,經(jīng)常用到qq,微信截圖分享功能,今天小編通過(guò)本文給大家介紹Android實(shí)現(xiàn)截圖分享qq 微信功能,具體實(shí)現(xiàn)代碼大家參考下本文2017-12-12
Android實(shí)現(xiàn)圖片預(yù)覽與保存功能
在App開發(fā)中,通常為了省流提高加載速度提升用戶體驗(yàn)我們通常在列表中或新聞中的插圖都是以縮略圖壓縮過(guò)的圖片來(lái)進(jìn)行展示,當(dāng)用戶點(diǎn)擊圖片時(shí)我們?cè)偃ゼ虞d真正像素的大圖讓用戶預(yù)覽。本文將利用Flutter實(shí)現(xiàn)這一功能,需要的可以參考一下2022-04-04
flutter開發(fā)的app項(xiàng)目?打包成web
如果你的Flutter版本低于2.0,請(qǐng)先升級(jí)Flutter版本,創(chuàng)建一個(gè)web文件夾來(lái)存放web相關(guān)的資源,使用HTML渲染器打包,該渲染器提供的打開速度最快,并且具有良好的瀏覽器兼容性,使用默認(rèn)設(shè)置進(jìn)行打包,提供的打開速度為一般,但依然保持良好的瀏覽器兼容性2024-08-08
Android使用ViewPager完成app引導(dǎo)頁(yè)
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager完成app引導(dǎo)頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
Android事件分發(fā)機(jī)制深入刨析原理及源碼
Android?的事件分發(fā)機(jī)制大體可以分為三部分:事件生產(chǎn)、事件分發(fā)?、事件消費(fèi)。事件的生產(chǎn)是由用戶點(diǎn)擊屏幕產(chǎn)生,我們這次著重分析事件的分發(fā)和消費(fèi),因?yàn)槭录职l(fā)和處理聯(lián)系的過(guò)于緊密,這篇文章將把事件的分發(fā)和消費(fèi)放在一起分析2023-04-04

