【问题标题】:Observing volume changes made by apps观察应用程序所做的音量变化
【发布时间】:2012-02-10 11:21:02
【问题描述】:

我有一个注册到 android.provider.Settings.System 的 ContentObserver,它应该观察任何音量的变化。单击硬件音量按钮时会按预期通知,但当我通过 AudioManager.setStreamVolume 或 AudioManager.adjustStreamVolume 更改音量时不会通知。

这是我的 ContentObserver 的样子:

// this is a Service
this.getApplicationContext().getContentResolver().registerContentObserver(
  android.provider.Settings.System.CONTENT_URI, 
  true, new ContentObserver(new Handler()) {
    public void onChange(boolean selfChange) {
      Log.d("ContentObserver", "got notified");
    }
});

这里是我对 AudioManager.adjustStreamVolume 的调用:

// this.context is the activities context
this.context.getSystemService(Context.AUDIO_SERVICE).adjustStreamVolume(
  AudioManager.STREAM_RING, AudioManager.ADJUST_LOWER,
  AudioManager.FLAG_SHOW_UI);

我已阅读 thisthat 帖子以及 AudioManagerSettings.System 文档,但找不到使用音量按钮更改音量时通知观察者但使用音量按钮更改音量时没有通知的原因音频管理器。

感谢您的帮助!

【问题讨论】:

    标签: java android android-emulator


    【解决方案1】:

    AudioManager 确实广播了一个意图

    android.media.VOLUME_CHANGED_ACTION`

    但这不是官方文档的一部分。所以这可能会在未来的版本中改变。但是您至少可以将其用于姜饼设备。

    你可以从here找到更多关于intent的额外内容

    【讨论】:

    • 我仍然不知道为什么在调用 adjustStreamVolume 时没有通知服务,但是这个答案解决了我的问题,它应该被通知。我发现音量按钮不会调用 set/adjustStreamVolume,但不应该一切都会导致 Settings.System 的变化吗?
    • 看intent中指向extras的链接,这个事件只有在SCO音量变化时才会广播……
    • 我们为内容观察者导入什么?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2017-08-02
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多