0

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"/>
Gokul Nath KP
  • 15,485
  • 24
  • 88
  • 126
kk2004
  • 1
  • 1
  • 3
  • Please edit your question and post the entire stack trace, not just the error message. – CommonsWare Sep 09 '22 at 21:53
  • Does this answer your question? [Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider requires android.permission.MANAGE\_DOCUMENTS](https://stackoverflow.com/questions/51139191/permission-denial-reading-com-android-providers-downloads-downloadstorageprovid) – cutiko Sep 09 '22 at 22:26
  • Do you have WRITE_EXTERNAL_STORAGE permission? – DiLDoST Sep 10 '22 at 00:41

1 Answers1

0

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

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" 
    android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

If these are in your manifest, try checking for them on Runtime

Kotlin ->


var isReadPermissionAllowed = false
var isWritePermissionAllowed = false

isReadPermissionAllowed = 
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED

isWritePermissionAllowed = 
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED

if (isReadPermissionAllowed && isWritePermissionAllowed) {
            startDownload()
        }else{
            ActivityCompat.requestPermissions(
                this,
                arrayOf(
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
                ),1)
        }
M Ashhal
  • 389
  • 2
  • 12