2011-11-09 3 views
8

전화가 올 때 장치 진동 설정을 해제하고 싶습니다. PHONE_STATE 브로드 캐스트를 수신하면이 기능을 수행하는 BroadcastReceiver를 구현했습니다. 문제는 진동을 전혀 끌 수 없다는 것입니다.수신 전화 수신시 진동 설정이 꺼지지 않음 - Android

AudioManager audioManager = (AudioManager) 
          context.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
           AudioManager.VIBRATE_SETTING_OFF); 

또는

Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
vib.cancel(); 

첫 번째 방법은 나에게 이상적인 것 : 나는 다음을 시도했다. 전화 수신시 진동을 "켜기"위해 작동합니다. 그러나, 나는이 시나리오에서 "off"할 수는 없다.

아무도 이것을 시도한 적이 있습니까?

편집 : Android의 Phone 앱 코드를 확인했습니다. 코드에 이어 Ringer.java에 존재 :

if (shouldVibrate() && mVibratorThread == null) { 
    mContinueVibrating = true; 
    mVibratorThread = new VibratorThread(); 
    mVibratorThread.start(); 
} 

스레드가 전화를 진동 전화 응용 프로그램에 의해 처음 시작됩니다. 진동 설정을 off로 변경하면이 검사는 건너 뛰지 만 이미 시작된 스레드는 계속 실행됩니다.

수신 전화가 오면 진동이 켜지는 방법에 대해서도 설명합니다. 이 경우 스레드가 처음에 실행되고 있지 않습니다. 그런 다음 진동 설정을 켜면 시작됩니다. 나는 전화 애플 리케이션을 변경하지 않고 문제에 대한 해결책이 있다고 생각하지 않습니다.

+1

나는 그것에 대해서도 관심이 있습니다. 내가 아는 한 그것은 그것과 같습니다 : 진동을 시작하는 실이나 문맥 만이 나중에 멈출 수있는 유일한 것입니다. 진동 설정 변경에 대해 : 안드로이드에 버그가있는 것 같습니다. 설정이 변경되면 청취자에게 알림이 전송되지 않으므로 진동을 멈출 수 없습니다. – SimonSays

+0

안녕하세요 Aman,이 문제를 해결 했습니까? 나는 같은 문제에 직면하고있다. –

답변

0

이 :

Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
vib.cancel(); 

이는 진동의 새 인스턴스를 취소으로 도움이 될 수 없습니다.

진동이 이미 진행 중임에 따라 전화가 이미 들어 왔을 때 기기의 진동을 돌리기에는 너무 늦었다 고 생각할 수 있습니다. 전화가 오기 전에 전화를해야합니다.

+0

들어오는 호출이 선택한 연락처 중 하나에서 온 경우에만 진동 설정을 변경하고 싶습니다. 따라서 수신 통화 전에 진동 설정을 변경하는 것은 옵션이 아닙니다. 안드로이드는 통화가 들어온 후에 벨소리 모드와 벨소리 볼륨을 변경할 수 있기 때문에 진동을 변경하기를 바랬습니다. –