If I understand correctly, the motion sensors on phones only detect acceleration. Whenever you get data for rotation on iOS using the built in rotation sensor polling, for example, it’s abstracted from you that the device is actually computing it from a combination of rotation rate and gravity. And I think the gyroscope does something extra to help clean up the rotation input.
Just last week I actually was able to get the current device rotation using rotation rate. I think I’m not quite done yet since I’m not taking gravity into account and I get some unexpected results if I rotate the device around just right. Also, I get some unwanted rotation even when the device is sitting flat on my table. Hopefully taking gravity into account will help eliminate that as well. I can post the code I have tonight when I get home.
It would definitely be nice to get just the derived device rotation instead of having to get it manually.
Here’s my original post as well: Working with device orientation - Android Development - Unreal Engine Forums