-1

Android 開発者の皆様、こんにちは。

ブロードキャスト レシーバーを登録済みと宣言しましたandroid.media.RINGER_MODE_CHANGED。それは正常に機能しており、呼び出しモードが変更されるたびに呼び出されます。

本当の問題は、呼び出し音モードの遷移を知る必要があることです。つまり、呼び出し音モードが通常からサイレントに、またはその逆に変更されたときに、いくつかのロジックを実行する必要があります。呼び出し音モードがサイレントからバイブレーションに変更された場合は、何もしません。

私がこれまでに行ったすべての調査は、あなたが RINGER_MDOE_CHANGED を受け取った時点で、それが変更されているという事実を指摘しています。その変更前の呼び出し音モードが何であるかはわかりません。

API ドキュメントから、http://developer.android.com/reference/android/media/AudioManager.html#RINGER_MODE_CHANGED_ACTIONは、インテントのエクストラに EXTRA_RINGER_MODE が含まれていると述べています。しかし、それは役に立ちません。それが現在の設定です。 から取得できますAudioManager.getRingerMode()

最後の呼び出し音モードを照会する方法を知っていますか? 皆さんが助けてくれることを願っています。あなたは私の最後の希望です。ありがとうございました。

4

1 に答える 1

0

API から以前の呼び出し音モードを取得する方法はありませんが、次のパターンを使用してこれを実現できます。

  1. 単純な型変数RingerModeMonitorServiceであるリンガーモードを保持するサービス (名前を付けましょう) を用意します。を使用intする前に int 値を保持します。stopSelf()persistInt()
  2. BroadcastReceiver に RINGER_MODE_CHANGED_ACTION を登録させます。そのonReceive()上で、開始するインテントを発行しRingerModeMonitorServiceます。インテント フラグをリンガー モードとして設定します。
  3. BroadcastReceiver に BOOT_COMPLETED アクションを登録させます。同様に、リンガー モードをそのフラグに設定して、RingerModeMonitorService を開始するインテントを発行します。主な活動を開始することもできますRingerModeMonitorService。に保存されている着信モードを初期化しますRingerModeMonitorService

その後、ブロードキャスト レシーバーが呼び出し音モードの変更を受信し、以前のモードを知りたい場合は、RingerModeMonitorService にバインドしてMessage. RingerModeMonitorService は、永続化された呼び出し音モードを読み取り、 Message およびHandlerを使用して返します。

複雑に聞こえますが、考え方は単純です。呼び出し音モードを変更するたびに、次回の参照用に呼び出し音モードの値を書き留めます (持続します)。ただし、書き留める前に必ず値を読み取ってください。そうしないと上書きされます。読み取った値は常に、以前のものではなく現在のリンガー モードです。

http://developer.android.com/guide/components/bound-services.html#Messenger にはサービス通信の詳細があります

于 2016-01-29T04:14:16.070 に答える