• 全国 [切换]
  • 二维码
    错改网

    手机WAP版

    手机也能找商机,信息同步6大终端平台!

    微信小程序

    微信公众号

    当前位置: 首页 » 行业新闻 » 热点新闻 » 正文

    Android搜索本地文件

    放大字体  缩小字体 发布日期:2020-01-12 13:59:03   浏览次数:1207  发布人:c27e****  IP:117.173.23.***  评论:0
    导读

    最近做了一个搜索本地文件功能,搜索文件范围包括日志,apk,pdf,txt,jpg,zip,mp3,mp4等各种文件。使用了contentResolver访问本地文件数据,效果如下:文件实体类FileBean: data class FileBean(val fileName: String, val path: String)文件搜索管理类SearchFileProvider: 查询的uri为M

    最近做了一个搜索本地文件功能,搜索文件范围包括日志,apk,pdf,txt,jpg,zip,mp3,mp4等各种文件。使用了contentResolver访问本地文件数据,效果如下:






    文件实体类FileBean:

    data class FileBean(val fileName: String, val path: String)

    文件搜索管理类SearchFileProvider:
    查询的uri为MediaStore.Files.getContentUri("external"),查询条件为各位类型文件。

    object SearchFileProvider { private const val MAX_FILE_COUNT = 30 fun searchLocalFile(context: Context, key: String): ArrayList<FileBean> { var list = ArrayList<FileBean>() val volumeName = "external" val columns = arrayOf(MediaStore.Files.FileColumns.DATA) val selection = MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.mp3' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.json' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.log' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.apk' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.mp4' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.pdf' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.txt' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.jpg' OR " + MediaStore.Files.FileColumns.DATA + " LIKE '%$key%.zip'" var cursor: Cursor? = null try { cursor = context.contentResolver.query( MediaStore.Files.getContentUri(volumeName), columns, selection, null, null ) if (cursor != null) { while (cursor.moveTonext()) { if (list.size < MAX_FILE_COUNT) { val absolutePath = cursor.getString(0) File(absolutePath).apply { if (exists() && !TextUtils.isEmpty(name) && name.contains(".")) { if (!TextUtils.isEmpty(name)) { var bean = FileBean(name, path) list.add(bean) } } } } else { return list } } } } catch (e: java.lang.Exception) { e.printStackTrace() } finally { try { if (cursor != null) { cursor.close() cursor = null } } catch (e: java.lang.Exception) { } } return list } }

    这里是列表adapter:

    class FileAdapter(val context: Context): RecyclerView.Adapter<FileAdapter.FileViewHolder>() { private var datas = ArrayList<FileBean>() fun setDatas(datas: ArrayList<FileBean>) { this.datas = datas notifyDataSetChanged() } class FileViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { var ivIcon: ImageView?= null var tvName: TextView?= null init { ivIcon = itemView.findViewById(R.id.iv_icon) tvName = itemView.findViewById(R.id.tv_file_name) } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FileViewHolder { return FileViewHolder(LayoutInflater.from(context).inflate(R.layout.item_file, parent, false)) } override fun onBindViewHolder(holder: FileViewHolder, position: Int) { holder.tvName?.text = datas[position].fileName setFileIcon(holder.ivIcon!!, datas[position].fileName) holder.itemView.setonClickListener { } } override fun getItemCount(): Int { return datas.size } private fun setFileIcon(imageView: ImageView, fileName: String) { if (fileName.endsWith(".jpg") || fileName.endsWith(".mp4")) { imageView.background = context.resources.getDrawable(R.drawable.category_file_icon_pic_phone) } else { var drawableId = 0 if (fileName.endsWith(".txt") || fileName.endsWith(".pdf")) { drawableId = R.drawable.category_file_icon_doc_phone } else if (fileName.endsWith(".zip")) { drawableId = R.drawable.category_file_icon_zip_phone } else if (fileName.endsWith(".mp3")) { drawableId = R.drawable.category_file_icon_music_phone } else if (fileName.endsWith(".apk")) { drawableId = R.drawable.category_file_icon_apk_phone } else { drawableId = R.drawable.ic_local_file } imageView.background = context.resources.getDrawable(drawableId) } } }

    然后,需要能够访问文件,别忘了加上6.0访问权限里的WRITE_EXTERNAL_STORAGE权限,获取本地文件访问的权限。并且注意,在targetsdk 29及以下,可以访问所有问题,高于29,则只能够访问到图片,视频,音乐这样的多媒体文件。

    不推荐电脑端访问(用户少)
    请微信扫一扫,查看完整信息(记得微信收藏)
     
    (文/匿名(若涉版权问题请联系我们核实发布者) / 非法信息举报 / 删稿)
    打赏
    免责声明
    • 
    本文为昵称为 c27e**** 发布的作品,本文仅代表发布者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,发布者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们154208694@qq.com删除,我们积极做(权利人与发布者之间的调停者)中立处理。郑重说明:不 违规举报 视为放弃权利,本站不承担任何责任!
    有个别老鼠屎以营利为目的遇到侵权情况但不联系本站或自己发布违规信息然后直接向本站索取高额赔偿等情况,本站一概以诈骗报警处理,曾经有1例诈骗分子已经绳之以法,本站本着公平公正的原则,若遇 违规举报 我们100%在3个工作日内处理!
    0 条相关评论
     

    (c)2008-现在 cuogai.com All Rights Reserved.