Android 감청 음량 변화 실현

본 논문 의 사례 는 안 드 로 이 드 가 감청 음량 변 화 를 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
최근 프로젝트 에서 볼 륨 감청 및 변경 요구 사항 이 언급 되 었 습 니 다.
음량 의 변 화 를 감청 하려 면 두 가지 방법 이 있 습 니 다.
1.감청 볼 륨 키 의 변화
방법:activity onKeyDown 함수 재 작성

@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);
}
장점:빠 르 고 편리 하 며 간단 하 다
단점: 
1.볼 륨 키 를 소모 하여 이벤트 변경(false 로 되 돌아 가도 소 용 없 음),실측
2.이 감청 은 현재 Activity 에 대해 서로 다른 Ac 는 onKeyDown 함 수 를 다시 써 야 합 니 다.
3.두 번 째 점 에서 알 수 있 듯 이 전체 응용 범위 의 감청 을 할 수 없다.
2.볼 륨 변 화 를 가 져 오 는 방송
시스템 볼 륨 이 변 할 때 라디오 를 보 내 고 이 걸 감청 하면 됩 니 다.볼 륨 이 변 하 는 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){
            //      
            context.registerReceiver(mVolumeBroadCastReceiver!!, filter)
        }
    }

    fun unregisterReceiver(){
        if(mVolumeBroadCastReceiver != null){
            context.unregisterReceiver(mVolumeBroadCastReceiver!!)
            mVolumeBroadCastReceiver = null
        }
    }

    interface VolumeChangeListener{
        fun onVolumeDownToMin()
        fun onVolumeUp()
    }
    
    //                 
    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()
                }
            }
        }

    }
}
전체 감청 을 실현 하려 면 하나의 app 수명 주기 에 존재 하 는 Context 에서 감청 할 수 있 습 니 다.예 를 들 어 MainActivity 등 입 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기