我想在后台服务或Android原生环境中检测音量按钮单击事件。我希望它可以随时检测到该事件。
我尝试了下面的代码ContentObserver
,但这只能检测到AUDIO_SERVICE
变化的事件,如果前台应用程序正在运行音乐,这种方法无法检测到它,我认为因为它是STREAM_MUSIC
但不是AUDIO_SERVICE
。我想要的是随时检测音量按钮点击和任何音量按钮点击。
有谁知道该怎么做?我可以用 C 在本机代码中实现它吗?
public class SettingsContentObserver extends ContentObserver {
int previousVolume;
Context context;
public SettingsContentObserver(Context c, Handler handler) {
super(handler);
context=c;
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
previousVolume = audio.getStreamVolume(AudioManager.AUDIO_SERVICE);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.AUDIO_SERVICE);
int delta=previousVolume-currentVolume;
if(delta>0)
{
Logger.d("Volume Up!");
previousVolume=currentVolume;
}
else if(delta<0)
{
Logger.d("Volume Down!");
previousVolume=currentVolume;
}
}
}
然后在我的服务 onCreate 中注册它:
mSettingsContentObserver = new SettingsContentObserver(this,new Handler());
getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver );
然后在 onDestroy 中注销:
getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver);