2015-02-05 2 views
0

나는 스팸 메일 필터링 앱을 개발 중이며 수신 (스팸) 전화에 대한 벨소리를 무음화하려고합니다. 문제는 AudioManager.setStreamMute 또는 AudioManager.setRingerMode가 Lollipop에서 작동하지 않는 것입니다.AudioManager.setStreamMute가 안드로이드 5에서 작동하지 않습니다. Lollipop

public class CallReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE); 

    if (stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 

     AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     audioManager.setStreamMute(AudioManager.STREAM_RING, false); 
     Log.i(TAG, "unmute"); 

    } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 

     AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     audioManager.setStreamMute(AudioManager.STREAM_RING, true); 
     Log.i(TAG, "mute"); 

    } 
    } 

가끔 걸려 오는 전화, 항상 실행됩니다 음소거 부분입니다하지만 때로는 성공하고 벨소리를 음소거 실패 여기 내 코드입니다. 나는 어떤 규칙도 찾을 수 없다. audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)도 작동하지 않습니다. 이것은 에뮬레이터 < 5에서 테스트했을 때 제대로 작동하는 것 같습니다. 그래서 Lollipop이 자동 모드가 아니지만 중단 필터와 관련이 있다고 생각합니다. 상업용 스팸 통화 필터가 정상적으로 작동하므로 Lollipop으로 수신 통화를 어떻게 침묵시킬 수 있는지 알려주실 수 있습니까?

+0

관련이 있는지는 잘 모르겠지만 롤 포팝에서만 여러 개의 onReceive 통화가있어 이상한 행동을합니다. 이후로 나는 단지 하나의 전화를 기대하고 있습니다. – gerfmarquez

답변

1

안드로이드 5에서 동일한 문제가 발생했습니다. 음소거를 해제하려면 false 값을 가진 AudioManager.setStreamMute가 작동하지 않습니다.

AudioManager.setStreamSolo를 사용해 보았는데 저에게 효과적이었습니다.

//to mute ringtone 
Global.app().getAudioManager().setStreamSolo(AudioManager.STREAM_MUSIC, true); 

//unmute ringtone 
Global.app().getAudioManager().setStreamSolo(AudioManager.STREAM_MUSIC, false); 

재생하려는 것을 제외하고 다른 모든 스트림을 음소거합니다. 5 월에는 벨소리 대신 내 자신의 오디오를 재생해야했습니다.

그러나 절대 침묵이 필요하면 침묵 오디오를 해킹하여 사운드 해킹을 시도 할 수 있습니다.

+0

글로벌이란? – Caipivara

+1

Global.app()는 getApplicationContext()를 참조합니다. Global은 단순한 활동 또는 서비스 컨텍스트가 아닌 응용 프로그램 컨텍스트에 액세스하기위한 단일 클래스입니다.이 컨텍스트는 으로 매니페스트에서 선언해야합니다. – Infinity

관련 문제