So I've switched to a tiered data plan. Is there a way to lock certain applications from using 3g/4g and instead only use connected wifi.
Assuming you've got Android 4.0 or higher, you can do the following:
- Go to Settings→Data Usage
- Activate the limit by marking the checkbox, and moving the red and orange bars for "Deactivation" and "Warning" (hint: you can set them imaginary high to not have any effect -- but they must be enabled)
- Now scroll the list below the graph and tap the apps you want to limit. At the end of their resp. pages, you'll find another checkbox to limit their background data -- mark it.
Limiting data usage
Now those apps can no longer use mobile data without your consent: only actions you triggered yourself ("foreground data") will be performed by them, no sync in the background or other background activity.
(Almost) Independent of the Android version used, but root available:
You can use a firewall app such as e.g. DroidWall - Android Firewall or its successor AFWall+ (Android Firewall) to explicitly permit/forbid apps to use either mobile data or WiFi or both. Whitelists (forbid all except...) or blacklists (permit all but...) are possible.
Worth a try: NoRoot Firewall. Not sure if and how this works without root -- but it's free, so nothing to lose :)
If you have root enabled, you also could install AFWall+.
It allows you to add custom iptables rules per app for each outbound connectivity.