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

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

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

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

Solutions Collecting From Web of "不断检查Android服务中的音量变化"

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