我写了这段代码,显然有缺陷。我如何创建一个不断检查数量变化的服务?关键监听器不能在服务中使用,请不要使用卷密钥监听器发布答案。
我的代码错了,因为我为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();
}
}
答案 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);