and*_*per 10 android volume event-handling
有没有办法在Android上收听音量变化事件,而不仅仅是接管音量按钮?
我发现唯一有效的方法就在这里,但只有在音量控制消失后才有效.
并非所有设备都有音量按钮,我需要在音量发生变化时立即捕捉它们,而不是在音量对话框消失后.
Tad*_*Tad 22
更好,你可以注册ContentObserver如下:
getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, new ContentObserver(){...} );
Run Code Online (Sandbox Code Playgroud)
您的ContentObserver可能如下所示:
public class SettingsContentObserver extends ContentObserver {
private AudioManager audioManager;
public SettingsContentObserver(Context context, Handler handler) {
super(handler);
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
@Override
public boolean deliverSelfNotifications() {
return false;
}
@Override
public void onChange(boolean selfChange) {
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
Log.d(TAG, "Volume now " + currentVolume);
}
}
Run Code Online (Sandbox Code Playgroud)
完成后:
getApplicationContext().getContentResolver().unregisterContentObserver(mContentObserver);
Run Code Online (Sandbox Code Playgroud)
但有一点需要注意 - 如果快速按下大量按钮,有时通知似乎会延迟.
您可以使用: registerMediaButtonEventReceiver (ComponentName eventReceiver) 它将组件注册为 MEDIA_BUTTON 意图的唯一接收者。
// in your activity.
MediaButtonReceiver receiver = new MediaButtonReceiver();
// in onCreate put
registerMediaButtonEventReceiver(receiver);
class MediaButtonReceiver implements BroadcastReceiver {
void onReceive(Intent intent) {
KeyEvent ke = (KeyEvent)intent.getExtra(Intent.EXTRA_KEY_EVENT);
if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
//action when volume goes down
}
if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {
//action when volume goes up
}
}
}
//In both onStop and onPause put :
unregisterMediaButtonEventReceiver(receiver);
Run Code Online (Sandbox Code Playgroud)
我们在这里所做的是定义一个处理 ACTION_MEDIA_BUTTON 的 BroadcastReceiver。并使用 EXTRA_KEY_EVENT ,它包含导致广播获取按下的内容并对其采取行动的按键事件。
| 归档时间: |
|
| 查看次数: |
22143 次 |
| 最近记录: |