禁用相机快门声音,AudioManager在三星中不起作用

时间:2018-07-17 14:20:53

标签: android android-camera android-audiomanager

我禁用了相机的快门声,如下所示:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
     mgr.setStreamVolume(AudioManager.STREAM_SYSTEM,0,0);
     mgr.adjustStreamVolume(AudioManager.STREAM_SYSTEM,AudioManager.ADJUST_MUTE, 0);
 } else {
     mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);
}

这对我的大多数测试设备都适用。

如果我的全系统声音选项都很大,我可以在我的应用程序设置中禁用和启用快门声。

我在三星A3(2016)和三星S7上进行了测试,快门声音始终处于最大状态。当我完全静音应用程序外部系统设置中的所有声音时-仍然存在快门声音。 另外,如果我在应用程序内部从上面禁用带有代码片段的快门声音,则在三星设备上会播放快门声音。

我试图使所有标志静音:

int streams = AudioManager.STREAM_ALARM|
              AudioManager.STREAM_DTMF|
              AudioManager.STREAM_MUSIC|     
              AudioManager.STREAM_NOTIFICATION|
              AudioManager.STREAM_RING|
              AudioManager.STREAM_SYSTEM|
              AudioManager.STREAM_VOICE_CALL; 

mgr.adjustVolume(AudioManager.ADJUST_MUTE, streams);

结果仍然相同。

谁能告诉我,我在这里想念的是什么?三星在使用某种不同的Audiostream吗?


编辑1: 我添加了以下代码,以检查上面的代码片段是否发生了更改:

int streamMuted = mgr.getStreamVolume(AudioManager.STREAM_SYSTEM);

mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);

Boolean volumeFixed = mgr.isVolumeFixed();
streamMuted = mgr.getStreamVolume(AudioManager.STREAM_SYSTEM);

这里的输出是STREAM_SYSTEM的开头是StreamVolume'6',然后我将这个Stream静音。之后,我要检查设备是否实施了固定的卷策略,即“ false”。 再次检查StreamVolume后,其值为'0'。

那么即使我使用默认的系统摄像机,快门声音也可能具有完全不同的AudioStream,可以通过静音系统声音设置来禁用快门声音吗?

2 个答案:

答案 0 :(得分:1)

快门声音可能取决于硬件/制造商。在某些Android版本/ ROM中,无法禁用快门音。您可以在拍摄照片之前尝试启用“ DoNotDisturb”模式,但不能保证它能正常工作。

更新

在拍照之前,可能还有其他三种解决方案:

  • 使隐藏的“ AudioManager.STREAM_SYSTEM_ENFORCED” streamType静音(使用反射)
  • 设置“ AudioManager.setSpeakerphoneOn(false)”
  • 使用隐藏的“ android.media.AudioSystem.setDeviceConnectionState()”暂时禁用扬声器(请注意,此过程会将所有Android系统的扬声器设置为OFF,因此,如果管理不善,然后恢复得不好,将会非常危险。完成后的先前值)

答案 1 :(得分:1)

  

将其放入您的清单

<plugin>
          <artifactId>exec-maven-plugin</artifactId>
          <groupId>org.codehaus.mojo</groupId>
          <version>1.6.0</version>
          <executions>
            <execution>
              <id>npm install</id>
              <goals>
                <goal>exec</goal>
              </goals>
              <phase>generate-sources</phase>
              <configuration>
                <executable>${npm.executable}</executable>
                <arguments>
                  <argument>install</argument>
                </arguments>
                <workingDirectory>${basedir}/target/angular5/tourism</workingDirectory>
                <target>
                  <echo message="Npm install" />
                </target>
              </configuration>
            </execution>
          </executions>
        </plugin>