티스토리 뷰

마침내 해결책을 찾았습니다. BroadcastReceiver에서 ACTION_HEADSET_PLUG 인 텐트를 등록 할 때 과거 이벤트에서 저장 한 헤드셋 분리 이벤트에 대한 고정 인 텐트를 브로드 캐스팅했습니다. 이로 인해 스피커를 통해서만 오디오를 재생하는 콜백이 실행되었습니다.

자세한 내용은 다음 스택 오버플로 포스트를 참조하십시오 링크를

문제를 해결하기 위해 isInitialStickyBroadcast () 메서드를 사용 하여 과거 이벤트를 필터링했습니다.

public void onReceive(Context context, Intent intent) {
    switch (intent.getIntExtra("state", -1)) {
            case 0:
                        if (!isInitialStickyBroadcast()) {
                                        // headset unplugged
                                                    }
                                                                break;
                                                                        case 1: 
                                                                                    // headset plugged in
                                                                                                break;
                                                                                                        default:
                                                                                                                    break;
                                                                                                                        }
                                                                                                                        }
                                                                                                                        
-------------------

나는 사용 ACTION_HEADSET_PLUG했지만 일부 장치 6.0 이상에서 이어폰을 통해 사운드를 재생하는 데 동일한 문제가 발생했습니다. 내 솔루션은 AudioAttributes다음보다 높은 버전의 장치 에 사용하는 것 입니다 LOLLIPOP.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        AudioAttributes mAttributes = new AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                                        .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
                                                        .build();
                                                                mMediaPlayer = MediaPlayer.create(this, R.raw.connection, mAttributes, 1);
                                                                    } else {
                                                                            mMediaPlayer = MediaPlayer.create(this, R.raw.connection);
                                                                                }
                                                                                


출처
https://stackoverflow.com/questions/39917064
댓글
공지사항
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30