Getting error :
java.lang.SecurityException: Permission Denial: writing com.android.providers.downloads.DownloadProvider uri content://downloads/my_downloads from pid=3608, uid=10081 requires android.permission.INTERNET, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1683)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
at android.content.ContentResolver.insert(ContentResolver.java:1274)
at android.app.DownloadManager.enqueue(DownloadManager.java:1014)
at com.udacity.MainActivity.startDownload(MainActivity.kt:124)
at com.udacity.MainActivity.download(MainActivity.kt:96)
at com.udacity.MainActivity.onCreate$lambda-0(MainActivity.kt:52)
at com.udacity.MainActivity.$r8$lambda$3NfQc1qKvvShQbwLc_qeJ0be78s(MainActivity.kt)
at com.udacity.MainActivity$$ExternalSyntheticLambda0.onClick(D8$$SyntheticClass)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
In MainActivity : downloadManager.enqueue(request)
Method to call DownloadManager to start Download file
kotlin
private fun startDownload() {
custom_button.buttonState = ButtonState.Clicked
val request = DownloadManager.Request(Uri.parse(url)) .setTitle(getString(R.string.app_name))
.setDescription(getString(R.string.app_description))
.setAllowedOverMetered(true)
.setAllowedOverRoaming(true)
val downloadManager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager downloadID = downloadManager.enqueue(request)// enqueue puts the download request in the queue.
}
In Manifest using :
<uses-permission android:name="android.permision.INTERNET"/>
I would suggest checking if you have these permissions in your manifest.
I'm not sure if this method will work above Android 10 since Scoped Storage was implemented. Learn more about it here -> https://developer.android.com/about/versions/11/privacy/storage
Also check out this answer for more help -> https://stackoverflow.com/a/68627407/19652887
If these are in your manifest, try checking for them on Runtime
Kotlin ->