网页制作与网站设计代码,网页制作工作前景,龙华做网站怎么样,网页设计基础知识试题11 以上 存放 Download 目录中 只能通过uri 进行读取 且只能APP 安装后存放的文件 才有访问权限 APP 卸载之后 数据库中权限会被移除 无法再通过文件名称进行查询 这边通过比较描述字段进行判断是否下载过文件 11 以上APP进行卸载后在安装下载 会出现重复文件
不知是否还有其他…11 以上 存放 Download 目录中 只能通过uri 进行读取 且只能APP 安装后存放的文件 才有访问权限 APP 卸载之后 数据库中权限会被移除 无法再通过文件名称进行查询 这边通过比较描述字段进行判断是否下载过文件 11 以上APP进行卸载后在安装下载 会出现重复文件
不知是否还有其他解决方案 将文件下载至缓存目录中 复制文件至Download目录中 fun copyFileToDownload(context:Context, oldPath:String, targetDirName:String) {if (Build.VERSION.SDK_INT Build.VERSION_CODES.Q) {copyFileToDownloadDir(context, oldPath, targetDirName)} else {var newPath FileUtils.getExternalDownloadsPath() File.separator targetDirName File.separator File(oldPath).namevar filePara File(FileUtils.getExternalDownloadsPath() File.separator targetDirName)if (filePara.exists()) {filePara.mkdirs()}FileUtils.copyFile(oldPath, newPath)}
}RequiresApi(Build.VERSION_CODES.Q)
fun copyFileToDownloadDir(context:Context, oldPath:String, targetDirName:String):Uri? {try {val oldFile File(oldPath)//设置目标文件的信息val values ContentValues()values.put(MediaStore.Images.Media.DESCRIPTION, oldFile.name)values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, oldFile.name)values.put(MediaStore.Files.FileColumns.TITLE, oldFile.name)values.put(MediaStore.Files.FileColumns.MIME_TYPE, oldPath.getMimeType())val relativePath Environment.DIRECTORY_DOWNLOADS File.separator targetDirNamevalues.put(MediaStore.Images.Media.RELATIVE_PATH, relativePath)val downloadUri MediaStore.Downloads.EXTERNAL_CONTENT_URIval resolver context.contentResolverval insertUri resolver.insert(downloadUri, values)if (insertUri ! null) {val fos resolver.openOutputStream(insertUri)if (fos ! null) {val fis FileInputStream(oldFile)fis.copyTo(fos)fis.close()fos.close()return insertUri}}} catch (e:Exception) {e.printStackTrace()}return null
} 通过查询 DESCRIPTION字段判断文件是否存在 fun findDownloadsFile(context:Context,targetDirName:String, description:String):ArrayListUri? {if (Build.VERSION.SDK_INT Build.VERSION_CODES.Q) {return findDownloadsUri4Description(context,targetDirName, description)} else {var newPath FileUtils.getExternalDownloadsPath() File.separator targetDirName File.separator descriptionvar file File(newPath)if (file.exists()) {var uri FileUtils.getFile2Uri(file)var list ArrayListUri()uri?.let { list.add(it) }return list} else {return null}}}/*** 通过描述 字段 查询 下载目录中的文件* param context Context* param dirName String? 子目录* param description String 描述字段* return ArrayListUri*/RequiresApi(Build.VERSION_CODES.Q)fun findDownloadsUri4Description(context:Context, dirName:String?, description:String):ArrayListUri {val resultList ArrayListUri()try {val resolver context.contentResolverval downloadUri MediaStore.Downloads.EXTERNAL_CONTENT_URIvar selection:String? nullvar selectionArgs mutableListOfString()if (dirName ! null dirName.isNotEmpty()) {selection MediaStore.Files.FileColumns.BUCKET_DISPLAY_NAME ? AND selectionArgs.add(dirName)}selection selection MediaStore.Images.Media.DESCRIPTION ? selectionArgs.add(description)val resultCursor resolver?.query(downloadUri, null, selection, selectionArgs.toTypedArray(), null)if (resultCursor ! null) {val fileIdIndex resultCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID)while (resultCursor.moveToNext()) {val fileId resultCursor.getLong(fileIdIndex)val pathUri downloadUri.buildUpon().appendPath($fileId).build()resultList.add(pathUri)}resultCursor.close()}} catch (e:Exception) {e.printStackTrace()}return resultList}