1

如何在相机快门关闭的同时播放声音?

在我的应用程序中,我有一个嵌入的相机预览。活动开始 5 秒后自动拍摄 3 张照片。在此期间,应用程序通过蓝牙接收一系列值。每次值大于预设阈值时,应用程序都会播放音调,这是使用 MediaPlayer 完成的。

问题是当相机关闭时,快门声似乎接管了所有音频,并且正在播放的音调停止并且仅在 3 次快门单击后恢复。我不想让相机快门静音,那么有没有办法让我通过点击快门来播放音调?这一切都发生在一项活动中。

谢谢

4

3 回答 3

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.5 毫米有线耳机,并且即使用户已将他/她的手机置于静音模式,您也将始终在扬声器中听到您的声音。

于 2012-12-11T06:51:29.690 回答
0

我认为这是你应该需要的。这应该包含您需要的内容。第一个链接可能比第二个链接更有用,因为您还想拥有其他声音,尽管您可以禁用特定于相机穿梭声音的音频通道。

于 2012-12-11T06:42:26.667 回答
-1

好吧,因为我还是编程新手,所以我会在谷歌上搜索哪些文件会发出相机声音,然后我会将你的应用程序放到它会用不同的扩展名重命名这些文件的位置,这样声音就不会响起并且有他们重命名回原始文件。或者我会研究如何通过更改相机值使相机静音。我知道在我的三星 Galaxy SIII 上我必须更改相机文件名。(冲刺载体)

于 2012-12-11T06:29:10.713 回答