2011-11-09 27 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(); 

最初のアプローチは、私には理想的なようです。通話を受信したときに振動を「オン」にするためにも機能します。しかし、このシナリオでは、私はそれらを "オフ"にすることはできません。

誰でもこれを試しましたか?

編集:Androidの電話アプリコードを確認しました。次のコードRinger.javaに存在している:

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

スレッドが電話を振動させる電話アプリで最初に開始されます。振動設定をオフに変更すると、このチェックはスキップされますが、すでに開始されているスレッドは実行を継続します。

また、着信時に振動をオンにする方法についても説明します。その場合、スレッドは最初に実行されていません。その後、振動設定をオンにすると起動します。私は電話アプリを変更しなければ、問題の解決策はないと思う。

+1

私もそれに興味があります。私がそれを知っている限り、そのようなものです:振動を開始するスレッドまたはコンテキストは、後でそれを止めることができる唯一のものです。振動設定の変更について:アンドロイドにバグがあるようです。設定が変更された場合、リスナーには通知が送信されないため、振動を止めることはできません。 – SimonSays

+0

こんにちは、Aman、この問題は解決しましたか?私は同じ問題に直面している、あなたが同じことについて私を助けることを願っています。 –

答えて

0

この:

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

は、バイブレータの新しいインスタンスをキャンセルするようお手伝いをするつもりはありません。

すでに振動が進行しているので、通話が既に入っている場合は、デバイスの振動を回すのが遅すぎると思います。電話が入る前にそれをする必要があります。

+0

着信通話が選択した連絡先からのものである場合にのみ、振動設定を変更します。したがって、着信前に振動設定を変更することはオプションではありません。 Androidは着信後に着信音と着信音の音量を変更できるので、私も振動を変更したいと考えていました。 –

関連する問題