Your App downloads files and potentially writes them to the external storage. I feel you should be requesting the WRITE_EXTERNAL_STORAGE (which implies also READ_EXTERNAL_STORAGE) permission, to accurately represent what it is your App does.
Then your first solution works. You just need any method of prompting the user before making the download call. Or otherwise make active acceptance part of your work flow.