音楽再生アプリを開発している際、今アプリを実行している端末がマナーモード(サイレントモード)かどうかを判定する必要があったので、その方法について調査しました。
まだ実際にアプリには組み込んでいないのですが、有用そうな記事を発見。
その記事がこちらです。
Detect silent mode in react native – Stack Overflow
https://stackoverflow.com/questions/55104470/detect-silent-mode-in-react-native
「react-native-sound」というライブラリを使用する方法なのですが、音楽を再生する機能ですでにこのライブラリを導入していたので、新しく別のライブラリを導入しなくていいというのが良かったです。
サイレントモードかを判断する方法ですが、まずライブラリの .getVolume()
メソッドを使って音量を取得します。
この時、音量が 0 だったらサイレントモードだと判断し、サイレントモードを解除するようにアプリ利用者に促します。
サンプルコードは下記のとおりです。
import Sound from 'react-native-sound'; Sound.setCategory('Playback'); const sound = new Sound('音楽ファイル名', Sound.MAIN_BUNDLE, (error) => { if (error) { console.log('failed to load the sound', error); return; } }); if (sound.getVolume() === 0) { // アプリ利用者にサイレントモード解除を促す処理を実行 }
10行目からの処理で、もし取得した端末の音量が 0 だった場合、アラートなどで利用者にサイレントモードを解除するよう促す処理を実行します。
上記の処理の実行タイミングは、アプリが起動してページが表示されたタイミングで問題ないかと思います。
特に急ぎではないのでまだアプリには実装していませんが、もし上記の内容を実装して問題があった場合は、また別の方法を調査してまとめる予定です。
以上、React Native で端末がサイレントモードかどうかを検出する方法についてでした。
ご参考になれば幸いです。