Yes, No, and spoof. Otherwise far too many apps would just go "I won't work until you enable the settings I ask for" - and then we're right back at the current situation.
It is none of the app's business if the "camera" it sees is actually just an animated GIF (in essence).
It is none of the app's business if the "location" information it receives says, Mountain View, California. Wow! Look how many customers live in California. :-P
In short, the app should not even get the yes/no data from the user.
But at the same time, I have a feeling that there would be frameworks popping up all over the place for recognizing spoofed settings. Yes, you'd end up with the same thing with an explicit "no" option, but the segment of users choosing "spoof" would presumably be smaller, and as such presumably the gain of an app adding functionality to detect spoofing would be smaller.
Although I personally think that the best option is, given that Android has the app store, have it part of the verification process that unrelated functionality of an app must work when functions are disabled.
To avoid the pain they could roll this out only to apps that declare themselves not to be assholes. I.e., an app could promise not to degrade ungracefully under limited perms, and in return it would never get spoofed data. (All other apps would get spoofed data whenever they access an API that a user had deselected.) If a non-asshole app were ever reported by a user and verified by Android devs to degrade in a user-hostile manner, it could just be placed in the asshole category permanently.
The spoofing API actually has only one requirement -- keep the app from accessing real data.
meanwhile Google Play Services made the Cyanogenmod privacy setting useless.
Any app can mask it’s access to your location, contacts, microphone etc. by using the Google Play Service instead.
It’s all or nothing again.
Try setting the Google Play Services access to “ask each time” and be surprised how many apps that don’t need your location, contacts.. try to spy on you.
Andreas
Having something like this would also allow for better audits. A separate app could show requests against a particular API by all apps as well as allow filtering. Other useful stats would be average number of requests per day per API per app and a graph of API calls by time of day. If nothing else this would allow to quickly identify rogue applications that make too many requests and drain battery.
On the topic of battery drain, I think that "allow to run in background" and "run as a service" would be a useful permissions as well. First one you would want to give to music players and to GPS applications, for additional control include time app allowed to run in the background before it is killed. Second permission would cover apps like IM and Facebook that are known to be tremendous battery hogs.