Since Android 6, according to the USB Media Support documentation, the Storage Access Framework seems to be the only available mecanism:
In Android 6.0, any device that is not adopted is considered portable. […] Third-party apps must go through the Storage Access Framework to interact with files on portable storage; direct access is explicitly blocked for privacy and security reasons.