问题 Android BroadCastReceiver用于音量键上下


如果用户向上或向下按音量键,是否可以在我的广播接收器中检测到它?我需要完整的代码。

这是我的Intent过滤器

IntentFilter filter = new IntentFilter();
filter.addAction("android.media.VOLUME_CHANGED_ACTION");

和我的 onReceive 方法是

public void onReceive(Context arg0, Intent intent) {
      KeyEvent ke = (KeyEvent)intent.getExtras().get(Intent.EXTRA_KEY_EVENT);
        if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {
                System.out.println("I got volume up event");
         }else if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
                System.out.println("I got volume key down event");
         }
    }

它给了我一个null KeyEvent ......任何想法?


12100
2017-09-24 08:11


起源



答案:


意图没有额外的EXTRA_KEY_EVENT。它确实有一个额外的android.media.EXTRA_VOLUME_STREAM_VALUE,其中包含新卷。

int volume = (Integer)intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE");

如果存储旧值,则可以推断是否按下了音量增大或减小。


11
2017-09-24 08:56



感谢您的回答,但是当电话处于静音或振动状态时,它给我相同的音量值= 1,或者是第一步。我怎么能检测到手机是静音还是振动还是没有第一价值? - malik M
您可以使用AudioManager来检测您是处于振动,静音还是正常模式: stackoverflow.com/questions/2048427/... - Theus
在最大音量变化时我启动了应用程序但是当音乐播放器在设备上运行时,那么在这种情况下我不想在音量变化之上打开我的应用程序。任何帮助 - Sunil Kumar


答案:


意图没有额外的EXTRA_KEY_EVENT。它确实有一个额外的android.media.EXTRA_VOLUME_STREAM_VALUE,其中包含新卷。

int volume = (Integer)intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE");

如果存储旧值,则可以推断是否按下了音量增大或减小。


11
2017-09-24 08:56



感谢您的回答,但是当电话处于静音或振动状态时,它给我相同的音量值= 1,或者是第一步。我怎么能检测到手机是静音还是振动还是没有第一价值? - malik M
您可以使用AudioManager来检测您是处于振动,静音还是正常模式: stackoverflow.com/questions/2048427/... - Theus
在最大音量变化时我启动了应用程序但是当音乐播放器在设备上运行时,那么在这种情况下我不想在音量变化之上打开我的应用程序。任何帮助 - Sunil Kumar