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

Kar*_*nan 8 audio android android-service android-audiomanager

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

我的代码错了,因为我为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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

hac*_*bod 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);
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

它被注册到观察者这样的设置:

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

        mContext.getContentResolver().registerContentObserver(
                System.getUriFor(System.VOLUME_SETTINGS[mStreamType]),
                false, mVolumeObserver);
Run Code Online (Sandbox Code Playgroud)