在Android 10及以上版本上,应用不再有直接访问外部存储的权限。为了在这些版本上保存文件到外部存储,您需要请求用户授权,然后使用存储访问框架(Storage Access Framework)进行文件操作。
以下是一些示例代码,展示如何使用存储访问框架将文件保存到外部存储:
1.确保在manifest清单中声明所需的权限:
2.请求用户授权:
private fun requestPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION) startActivityForResult(intent, REQUEST_CODE_PERMISSION) } else { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_CODE_PERMISSION) } }
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE_PERMISSION && resultCode == RESULT_OK) { val uri = data?.data if (uri != null) { contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION) writeFileToExternalStorage(uri) } } }
3.使用存储访问框架保存文件:
private fun writeFileToExternalStorage(uri: Uri? = null) { val filename = "test.txt" val content = "Hello World" val resolver = applicationContext.contentResolver val contentValues = ContentValues().apply { put(MediaStore.MediaColumns.DISPLAY_NAME, filename) put(MediaStore.MediaColumns.MIME_TYPE, "text/plain")