不断检查Android服务中的音量变化

时间:2013-01-08 02:02:25

标签: android audio android-service android-audiomanager

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

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

CODE

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();
        }

    }

1 个答案:

答案 0 :(得分:8)

如果要查看设置更改的时间,可以使用设置提供程序注册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);