プログラムは次のように機能します。ユーザーは電話番号のリストを持っており、他のシステム全体のアプリケーションが振動を提供しない場合(ミュートモードなど)にのみ、着信時に携帯電話が振動する可能性があります。アプリケーションはユーザーの設定を尊重する必要があるため、これはどういうわけかルールに違反していることを私は知っていますが、アプリケーションはこの必要性を持つ特定のユーザーに限定されています。私は2つの方法を試しましたが、どちらも満足のいくものではありません。
テレフォニーの状態を聞いて、自分のパターン(with
Vibrator.vibrate()
)でバイブレーションサービスを直接トリガーします。この方法は、着信がない場合でも効果的ですが、電話がCALL_STATE_RINGING
状態のときにランダムに効果的です。これは、着信時の振動を実際に処理するシステム全体のアプリケーションとの競合が原因だと思います。着信時に携帯電話が振動しているかどうかを判断し(と
AudioManager.shouldVibrate()
)、バイブレーション設定を変更するかどうかを決定します(AudioManager.setRingerMode()
とAudioManager.setVibrateSetting()
)。アプリケーションによってバイブレーション設定が変更された場合、携帯電話が元の状態に戻ったら、バイブレーション設定を復元する必要がありますCALL_STATE_IDLE
。ただし、この方法は、理由の兆候がない限り、まだ機能しない場合があります。
誰かがこの問題についてアドバイスをくれることを願っています。これらの2つの方法または他の提案についてのコメントは大歓迎です。