考えられる解決策の1つENFORCED_AUDIBLE
は、トーンに非表示のストリームタイプを使用することです。これは、カメラのシャッター音が使用する可能性が最も高いストリームタイプであるため、シャッター音がミュートされていない限り、ミュートされません。
このストリームタイプはICS(またはGB / HCだったかもしれませんが、頭の中ではっきりとは言えません)まで導入されなかったため、存在するすべてのバージョンのAndroidと互換性があるわけではないことに注意してください。このストリームタイプ識別子の整数値は7ですが、存在するかどうかを確認したり、プログラムでその値を取得したりする場合は、AudioSystem
クラスのリフレクションを使用して行うことができる場合があります。
これを行う方法の例を次に示します。
public static boolean mHasEnforcedStream = true;
public static int STREAM_SYSTEM_ENFORCED = 0;
...
static
{
try
{
Class asClass = Class.forName("android.media.AudioSystem");
Field sseField = asClass.getDeclaredField("STREAM_SYSTEM_ENFORCED");
STREAM_SYSTEM_ENFORCED = sseField.getInt(null);
}
catch (Exception e)
{
mHasEnforcedStream = false;
}
}
このストリームタイプを使用すると、ユーザーが3.5mm有線ヘッドセットを接続している場合や、ユーザーが電話をサイレントモードに設定している場合でも、常にスピーカーでトーンが聞こえることに注意してください。