经常检查在Android服务体积变化(Constantly check for volume cha

2019-07-17 23:41发布

我写这一段代码,这显然存在缺陷。 我该如何去创造,这将不断为您在体积变化的服务? 主要听众不能在服务中使用,请不要发布带有音量键的听众答案。

因为我已经给虚拟条件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();
        }

    }

Answer 1:

如果你想看到当设定的改变,你可以注册设置提供监控它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);


文章来源: Constantly check for volume change in Android services