8

我写了这段代码,它显然有缺陷。如何创建一个不断检查音量变化的服务?按键监听器不能在服务中使用,请不要使用音量键监听器发布答案。

我的代码是错误的,因为我为 while 循环提供了虚拟条件。我的服务检查音量变化而不崩溃的条件是什么?不可能是isScreenOn()因为在听音乐时可以改变音量并且屏幕是关闭的。

代码

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
    int newVolume=0;
    while(1==1)
    {
        newVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
        if(currentVolume!=newVolume)
        {
            Toast.makeText(this, "Volume change detected!", Toast.LENGTH_LONG).show();
        }

    }
4

1 回答 1

9

如果您想查看设置何时更改,您可以向设置提供者注册一个 ContentObserver 来监控它。例如,这是设置应用程序中的观察者:

    private ContentObserver mVolumeObserver = new ContentObserver(mHandler) {
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            if (mSeekBar != null && mAudioManager != null) {
                int volume = mAudioManager.getStreamVolume(mStreamType);
                mSeekBar.setProgress(volume);
            }
        }
    };

它被注册以观察如下设置:

        import android.provider.Settings;
        import android.provider.Settings.System;

        mContext.getContentResolver().registerContentObserver(
                System.getUriFor(System.VOLUME_SETTINGS[mStreamType]),
                false, mVolumeObserver);
于 2013-01-08T02:12:33.633 回答