This is an answer for anyone whose Android is too old to have volume
subcommand in media
command.
Thanks to Alex P's link, I got the inspiration from this guy's blog:
http://ktnr74.blogspot.com/2014/09/calling-android-services-from-adb-shell.html
You can use service
command to call functions like void setStreamVolume(int streamType, int index, int flags, String callingPackage)
on your Android device - a SO question.
Tried with my un-rooted Android 5.1 device and it worked.
Usage: service [-h|-?]
service list
service check SERVICE
service call SERVICE CODE [i32 INT | s16 STR] ...
Options:
i32: Write the integer INT into the send parcel.
s16: Write the UTF-16 string STR into the send parcel.
But the CODE
differs between Android versions. To find the code for setStreamVolume()
, first save the Bash script from this gist, change its permission to executable, connect your device via ADB and run the script with audio
as argument:
$ ./get_android_service_call_numbers.sh audio
(EDIT: https://github.com/T-vK/android-svc does that script.)
The script pulls info from Google and show you a list like this.
So we know the code for setStreamVolume()
is 4, since we know the number for STREAM_MUSIC
is 3, we can set music volume to 7 by this command:
$ adb shell service call audio 4 i32 3 i32 7
The maximum music volume on my device is 0xF
, you can query yours with int getStreamMaxVolume(int streamType)
function:
$ adb shell service call audio 15 i32 3