8

着信時のバイブレーション設定をオフにしたい。この機能のために、ブロードキャストの受信時にアクションを実行する BroadcastReceiver を実装しましたPHONE_STATE。問題は、バイブレーションをまったくオフにできないことです。私は次のことを試しました:

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();
}

スレッドは、電話を振動させる電話アプリによって最初に開始されます。バイブレーション設定をオフに変更すると、このチェックはスキップされますが、既に開始されているスレッドは引き続き実行されます。

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

4

1 に答える 1

0

これ:

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

バイブレーターの新しいインスタンスをキャンセルするため、役に立ちません。

すでにバイブレーションがかかっているので、すでに電話がかかってきている場合、デバイスのバイブレーションをオフにするのは遅すぎると想像できます。そのため、電話がかかってくる前にそれを行う必要があります。

于 2012-06-15T11:24:00.897 に答える