Many people have this problem with Android. You can see it has been reported in Android's bug tracking system. The number of levels is controlled by a setting that's compiled into the Android system image.
Use a different ROM
It's possible that flashing a custom-rom could increase the number of levels, but I don't know which, if any, custom ROMs do this. This bug report in cyanogenmod's tracker suggests they don't plan to add that feature, for fear it may cause compatibility problems with some apps.
Use a different app (easy)
Some media apps have their own volume control, on top of that provided by Android. I believe Poweramp is one such (but I don't use it myself). If there's one particular app you need more control of, such as a music app, you might want to replace it with one that has this feature.
Edit your phone's OS (advanced)
If you're not worried about the risk of breaking some (badly-written) apps, and your device is rooted, then you can follow these instructions to edit the Android system image to increase the number of levels. That site gives step-by-step instructions, including installing the developer tools you'll need to make system changes; a summary for knowledgeable people is as follows:
- Get
framework.jar
from your device and run baksmali
on it.
- Edit
framework\android\media\AudioService.smali
- Search for
0xft 0x0t 0x0t 0x0t
to find the table of audio levels.
- Replace the first number of each row with the desired number of levels (in hexadecimal).
- Run
smali
to generate a new framework.jar
, and then replace the original on the device.