If you change the frequency of the light but keep the intensity the same, the current stays the same too--until the frequency drops too low, and then you don't get any current anymore. And if you check that voltage difference that stops the current, that rises and falls linearly with frequency. V ∝ (f-f_crit).
Einstein explained it: light comes in units, in which the energy is proportional to the frequency, and electrons are bound to atoms with well-defined energies. If the light particle has less energy than that binding energy, the electron stays put. If more, it kicks the electron loose, and gives it a little extra energy, up to as much as the whole leftover energy (usually less, though).
So if you don't know the photon energy you can figure it out from how much energy electrons get kicked out with. (provided the photon energy isn't too low)
It is kind of hard to see this effect in air, because the electrons collide with air molecules and lose energy. It would be even harder to see it in a solid, unless the solid layers were ultra-thin: say 50 nanometers or so. The more energetic electrons (from higher-frequency light: e.g. blue) travel farther through the thin layers than those from lower-frequency light (e.g. red). In the same way as with the traditional experiment, you can add a negative voltage to the deeper layers: the more energetic electrons will still get through but the lower energy (from red light) won't. Varying the voltage lets you determine what the energy was.
So you can have solid-state frequency detection in a tiny (they estimate 100 nanometer square pixels are possible) device. If you use several readout layers you could get "instantaneous" estimates, which would be good for multi-frequency fiber devices.
The CPU of the machine you read this on uses layers that can be as thin as 0.5nm, so this looks doable. This falls in the category of "I should have thought of that," but I wasn't paying attention to how thin micro devices were getting.