【问题标题】:java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/java.lang.SecurityException:没有写入/storage/emulated/0/Download/的权限
【发布时间】:2021-07-01 19:09:59
【问题描述】:

我有一个应用程序,我需要从 edittext 获取 url,然后下载管理器来下载文件,但是出现了问题,导致应用程序不断崩溃,我尝试授予权限,但即使在授予权限后,它仍然会崩溃,我会感谢大家的帮助,谢谢。

  • 这是错误
 java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/
  • 这是我的代码
   binding.download.setOnClickListener {
           if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
             if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){

             } else {
                 ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),READ_EXTERNAL_STORAGE)
             }
           } else {
              downloadFile()
           }
        }
    }

    private fun downloadFile() {
        val downloadUrl = binding.editUrl.text.toString()
        val downloadRequest = DownloadManager.Request(Uri.parse(downloadUrl))
        downloadRequest.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
        downloadRequest.setTitle("Download")
        downloadRequest.setDescription("Download Simple File..")
        downloadRequest.allowScanningByMediaScanner()
        downloadRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION)
        downloadRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS , "" + System.currentTimeMillis())

        val downloadManager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager
        downloadManager.enqueue(downloadRequest)


    }

  • 这是在授予权限之后
  override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if(requestCode == READ_EXTERNAL_STORAGE &&  grantResults[0] == PackageManager.PERMISSION_GRANTED){
                downloadFile()
        }
    }

【问题讨论】:

  • 你解决了这个问题吗?

标签: kotlin android-download-manager


【解决方案1】:

正如标题所说。你想写但只请求读权限。

您需要请求Manifest.permission.WRITE_EXTERNAL_STORAGE

【讨论】:

  • 我也这样做了,但我只是没有包含清单文件代码,我已经向我的应用程序添加了写权限,当我启动应用程序时,它会显示对话框并授予权限,一旦我授予权限,它就会崩溃并显示上述消息
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多