質問

このようなプログラムは次のように機能します。ユーザーは電話番号のリストを持っています。携帯電話は、他のシステム全体のアプリケーションが振動を提供しない場合にのみ、着信コールで振動することができます(ミュートモードなど)。これは何らかの形でルールに反していることを知っています。なぜなら、アプリケーションはユーザーの設定を尊重する必要があるからですが、アプリケーションはこのニーズを持つ特定のユーザーに限定されています。私は2つの方法を試しましたが、どちらも満足していません:

  1. テレフォニー状態を聞いて、自分のパターンで振動サービスを直接トリガーします( Vibrator.vibrate())。この方法は、電話が載っているときにランダムに効果的に着信コールなしで効果的です CALL_STATE_RINGING 状態と私は、着信時に実際に振動を処理するシステム全体のアプリケーションとの競合のためだと思います。

  2. 携帯電話が着信の呼び出しで振動しているかどうかを判断します( AudioManager.shouldVibrate())、そして、振動設定を変更するかどうかを決定します(で AudioManager.setRingerMode()AudioManager.setVibrateSetting())。私のアプリケーションによって振動設定が変更された場合、携帯電話が戻ったら復元されます CALL_STATE_IDLE 州。ただし、この方法は、理由の兆候なしに、まだ機能していません。

誰かがこの問題についてアドバイスをすることができることを願っています。これらの2つの方法または他の提案に関するコメントは大歓迎です。

役に立ちましたか?

解決

携帯電話が振動するためには、2つの設定で再生する必要があります。最初のものは、aufiomanagerを使用して設定する必要があるサウンドモードです。

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(targetSoundMode);

2番目の部分は適切に文書化されておらず、これはあなたのコードの欠落部分だと思います。

String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent";
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1);

1を使用して振動をオンにし、0をオンにして振動をオフにします。

振動設定とモードでどのように動作するかを完全に理解するには、次のリンクをご覧ください。http://hi-android.info/src/com/android/settings/soundsettings.java.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top