我在想实现体积变化检测的时候遇到了一个问题。 由于必须通过服务在后台检测变化检测,所以我无法拦截音量键按下。
我试过 ContentObserver 来监听音量设置的变化,但没有成功。 但我进一步挖掘,发现当我这样注册时,我的 ContentObserver 会检测到音量变化:
this.getApplicationContext().getContentResolver().registerContentObserver(
android.provider.Settings.System.CONTENT_URI, true,
mSettingsContentObserver );
如果我理解正确的话,我已经尝试更改第一个参数 - 设置为监听的 URI。但我一无所获。那么,如何做到这一点呢?我不想在每次设置更改时更新我的 UI(我将 Seekbar 设置为某个位置)。
那么,如何注册内容观察器来监听媒体音量变化呢?
ContentObserver 的代码如下:
public class SettingsContentObserver extends ContentObserver {
public SettingsContentObserver(Handler handler) {
super(handler);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
myMethod();
}
}
最佳答案
将您的 onChange 方法更改为以下内容
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
int delta=previousVolume-currentVolume;
if(delta>0)
{
Logger.d("Decreased");
previousVolume=currentVolume;
}
else if(delta<0)
{
Logger.d("Increased");
previousVolume=currentVolume;
}
}
关于java - 如何为媒体音量变化注册 ContentObserver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192253/