web-dev-qa-db-ja.com

Android:サイレントモードを検出しますか?

Androidデバイス(21 +)がサイレントモードになっているかどうかを確認する方法があるかどうか疑問に思っていましたか? AudioManager.RINGER_MODE_SILENT、しかし、それがこの状況に関係があるのか​​、それとも確認するより良い方法があるのか​​と思っていました。

25
Paul Ruiz

私はこの投稿でネクロを持っていますが、同じ問題の解決策を探していて、私と同じようにこの投稿を通過したので、将来の参考のために解決策を残しています。

これを行う「公式の」方法を見つけることができませんでしたが、DnD状態を整数として返すことができる値を見つけました。この機能は内部的に「zen_mode」と呼ばれているため、次のコードで現在の値を確認できます。

Global.getInt(getContentResolver(), "zen_mode")

それが返されます:

  • -DnDがoffの場合。
  • 1-DnDがonの場合-優先順位のみ
  • 2-DnDがonの場合-完全な無音
  • 3-DnDがonの場合-アラームのみ

設定が優先度のみの場合は何も返しませんが、ニュースなし=優先度メッセージモードと仮定すると、その状態を理解できます。 これはバグだったに違いありません。1年経った今、他の州と同じように値を返します。いつ修正されたかはわかりませんが、期待どおりに機能するようになりました。

私は設定オブザーバーも試してみましたが、これは機能しますが、特定の状態遷移でのみ機能するため、この状態変化をリッスンする「公式」な方法が利用可能になるまで、定期的にポーリングすることが最善の策だと思います。

this Gist に値を取得するオブザーバーメソッドとポーリングメソッドの両方を含めました。うまくいけば、それは誰かを助ける/しばらくの間救うでしょう。

2017年3月15日更新:コメントのDavid Rihaに感謝します。答えるために1 - Priority Only状態を追加しました Gistを改訂 がその状態を認識し、他のデバイスまたは将来の更新が別の値を返すことを決定した場合にログに不明な値を出力します。

20
MattMatt

Androidからのポインタを使用して、プログラムでオンにする方法(dnd)を邪魔しないでください

SDK 23では、 Android.app.NotificationManager が必要なインターフェイス、つまりNotificationManager.getCurrentInterruptionFilter()

次のいずれかを返します。

  • INTERRUPTION_FILTER_PRIORITY
  • INTERRUPTION_FILTER_ALARMS
  • INTERRUPTION_FILTER_NONE
  • INTERRUPTION_FILTER_ALL
  • INTERRUPTION_FILTER_UNKNOWN

Nexus端末のGoogleヘルプサイレント機能によるとAndroid> = 6.0なので、SDK 23は質問するのが妥当なはずです。そうでない場合は、回避策を提供できるように、理由を尋ねるのが妥当だと思います。

24
ssice