【问题标题】:Disable all sound effects (hardware keys too) on Android禁用 Android 上的所有音效(也包括硬件按键)
【发布时间】:2012-07-25 20:14:55
【问题描述】:

我正在 Samsung Galaxy S3 上测试我的应用程序,该应用程序有两个触摸按钮,即后退按钮和菜单按钮

我将 soundEffectsEnabled 设置为 false 到我的所有根视图,并尝试制作自定义主题(如 here 中指出的那样)并将该主题设置在应用程序的清单文件中(我尝试将其添加到每个Activity 元素也是)。没有成功。

这是我在 res/values 中的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyCustomTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
    <item name="android:soundEffectsEnabled">false</item>
</style>
</resources>

还有我的Application元素的开始标签:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >

它可以正常构建和运行NoTitleBar.Fullscreen 也可以,但返回和菜单触摸按钮仍在播放声音

【问题讨论】:

  • 是否可以选择将整个设备设为静音模式?因为据我了解,back、home、recents 和任何其他硬件键都是由系统进程控制的。

标签: java android audio android-theme


【解决方案1】:

您可以在应用程序或任何活动运行时使用AudioManager 将所有系统声音静音。

setStreamMute(int, boolean)

静音或取消静音音频流。

静音命令受到保护以防止客户端进程死亡:如果 在流上具有活动静音请求的进程死亡,该流将 自动取消静音。

给定流的静音请求是累积的:AudioManager 可以接收来自一个或多个客户端的多个静音请求,并且 只有当相同数量的取消静音请求时,流才会取消静音 收到了。

为了获得更好的用户体验,应用必须取消静音流 在 onPause() 中,如果合适,静音再次在 onResume() 中。

所以,实现看起来像这样

@Override
protected void onResume() {
    super.onResume();
    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
}

@Override
protected void onPause() {
    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, false);
    super.onPause();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多