如果您正在处理媒体文件并针对 android q 或更多,这可能会起作用:
假设您已经获得了要修改的文件 uri,您将访问文件代码放在 try-catch 块中,然后您可以捕获 RecoverableSecurityException 从中您可以获取 actionIntent 并要求用户授予修改特定文件的权限,这里是那个的示例代码
private fun onDeleteClick(uri: Uri?) {
uri?.let {
try {
contentResolver.delete(it,null,null)
} catch (se:SecurityException){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
val securityException = se as RecoverableSecurityException
val intentSender = securityException.userAction.actionIntent
startIntentSenderForResult(intentSender.intentSender,0x11,null,0,0,0)
} else
{
throw SecurityException()
}
}
}
}
要监听用户对权限请求的响应,您可以像这样覆盖 onRequestPermissionsResult
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
if (requestCode == 1){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED ){
//you should be able to modify file now
} else {
Toast.makeText(this,"Permission was denied to access files",Toast.LENGTH_LONG).show()
}
}
}