如何注册ContentObserver介质体积的变化? [英] How to register ContentObserver for media volume change?
问题描述
我遇到了一个问题,当我想要实现体积变化的检测。
由于变化检测在通过服务后台进行检测,我不能拦截音量键presses。
我试过ContentObserver监听音量设置改变,但它并没有奏效。
但是我已经挖多一点,发现我的ContentObserver检测体积变化,当我注册这样的:
this.getApplicationContext()。getContentResolver()。registerContentObserver(
android.provider.Settings.System.CONTENT_URI,真实,
mSettingsContentObserver);
我试图改变的第一个参数 - 设定听,如果我理解正确的URI。但我一无所获。那么,如何才能做到这一点?我不想更新我的每一个设置变化的UI(我设置SeekBar以一定的positin)。
那么,如何注册内容观察者监听媒体的体积变化?
下面是ContentObserver的code:
公共类SettingsContentObserver扩展ContentObserver { 公共SettingsContentObserver(处理程序处理){
超(处理);
} @覆盖
公共布尔deliverSelfNotifications(){
返回super.deliverSelfNotifications();
} @覆盖
公共无效的onChange(布尔selfChange){
super.onChange(selfChange);
myMethod的();
}
}
更改您的onChange meathod以下
@覆盖
公共无效的onChange(布尔selfChange){
super.onChange(selfChange); AudioManager音频=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
INT currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC); INT三角洲= previousVolume,currentVolume; 如果(增量大于0)
{
Logger.d(下降);
previousVolume = currentVolume;
}
否则如果(增量℃,)
{
Logger.d(增加);
previousVolume = currentVolume;
}
}
I encountered a problem when I wanted to implement volume change detection. As the change detection has to be detected in the background via Service, I can not intercept volume key presses.
I've tried ContentObserver to listen for volume settings change, but it didn't worked. But I've dig a bit more, and found that my ContentObserver detects volume change when I register it like this:
this.getApplicationContext().getContentResolver().registerContentObserver(
android.provider.Settings.System.CONTENT_URI, true,
mSettingsContentObserver );
I've tried to change the first parameter - the URI of setting to listen, if I understand correctly. But I achieved nothing. So, how can this be done? I don't want to update my UI(I'm setting Seekbar to certain positin) on every settings change.
So, how do I register content observer to listen for media volume change?
Here's the code of 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();
}
}
Change your onChange meathod to the following
@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;
}
}
这篇关于如何注册ContentObserver介质体积的变化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!