The code seems to be correct, but the result should actually be a black texture, not a red one. Drivers ARE flaky with coyping data back from the frame buffer. If it doesn't work on your phone with neither setting, then it just doesn't work. There's no magic that i can apply to make it work. I can only repeat myself: Don't rely on it for your application. Make it an option for devices that can handle it, but don't base the app on it.
That said, what exactly do you want to use this feature for?