You definitely need to return false for the volume keys. That allows the operating system to handle the change of volume, which you can see when the Android volume control popup show onscreen. However, it still won’t allow the volume to increase/decrease continuously. In fact, I highly recommend that you return true *only* for the keys which you are handling and return false by default. Otherwise, you might encounter other unexpected behaviors.
If you want to know the nitty gritty details, then here is the reason why the volume does not get raised/decreased continuously. In Corona, the Lua runtime does not run on the main UI thread, but on a separate thread. Android key events are raised on the main UI thread. So, what we have to do is handle *all* key events received by the main UI, queue the events to be raised on the Lua thread, call the Lua listener for each queued key event, queue key events back onto the main UI thread that were not handled in Lua (ie: returned false), and finally re-dispatch the key events back to the activity/window to be handled by Android. We can’t call Lua listener directly from another thread, because this would cause race conditions and possibly crashes, making the above process necessary. The unfortunate side effect is that we lose Android default volume handling by handling all key events in native code and then re-dispatching them back to the window. Instead, the behavior we get is the volume being raised/lowered by a single step.
In the future, it would be much more worth it to have the Lua running on the main UI thread, because that would vastly simplify the above process, simplify enterprise/plugin development, and help us introduce other features that require main UI thread access. But there are other technical details, namely OpenGL not running on the main UI thread by default on Android, that’s holding us back on that at the moment. However, that’s something I want to experiment with later this year.
in any case, I hope the above helps explain this.