如何高效的遍历 Android 外部存储,找到自己需要的文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Arthar
V2EX    Android

如何高效的遍历 Android 外部存储,找到自己需要的文件

  •  
  •   Arthar 2016-12-27 11:14:03 +08:00 13478 次点击
    这是一个创建于 3215 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想找出外部存储上 mp4 、 mkv 等格式的视频文件,于是用广度优先把除"./"开头的隐藏目录都遍历了一次。但是这样的效率比较低。

    发现外部存储上有很多其他应用的文件夹,除 Android/<packagename>/路径外,很多应用还自己新建了文件夹,这些文件夹有没有什么共同的特征可以用来过滤掉呢?
    24 条回复    2016-12-27 14:28:04 +08:00
    bic
        1
    bic  
       2016-12-27 11:19:05 +08:00
    mxplay
    打开后后列出相应的视频文件
    bic
        2
    bic  
       2016-12-27 11:19:36 +08:00
    MX Player
    Arthar
        3
    Arthar  
    OP
       2016-12-27 11:22:48 +08:00
    @bic 要实现的是遍历文件的需求,并不是播放视频的需求啊
    cst4you
        5
    cst4you  
       2016-12-27 11:29:56 +08:00
    -_,- 你这样做跟流氓软件有什么区别哦
    Arthar
        6
    Arthar  
    OP
       2016-12-27 11:38:30 +08:00
    @cst4you 这怎么就跟流氓软件扯上关系了......
    loshine1992
        7
    loshine1992  
       2016-12-27 11:40:13 +08:00
    ContentProvider + MediaStore 对应的列名查询。
    besto
        8
    besto  
       2016-12-27 11:40:50 +08:00
    有一种东西叫 media scan ,会自己找的。
    退一万步说,就算自己要实现去扫文件,如果别人外接了一个 2T 的硬盘,各种目录,各种媒体文件,你能保证效率吗?
    优先使用 media scan 的结果, ls 有人贴了。即使要自己扫描,也是扫出多少显示多少,边扫边显示,优化好这个逻辑即可。

    PS1 ,这 TMD 是我 5 年前做山寨平板的需求。
    PS2 , AndroidN 还有以后的版本能不能这么干都是问号。
    Arthar
        9
    Arthar  
    OP
       2016-12-27 11:41:51 +08:00
    @little_cup MediaStore 并不能满足需求,想拿到路径后获取视频文件里更多的信息。 MediaStore 能读出来的信息不够。但是 MediaStore 录入视频的算法倒是非常有兴趣,还没看这方面的相关资料
    little_cup
        10
    little_cup  
       2016-12-27 11:46:02 +08:00
    @Arthar 必须要求文件路径这个需求就是错的,这样做下来只会导致各种不兼容网盘以及 multi-user 等 Android 框架内的合理情况。
    当然如果你们是定制早教机之类的当我没说。
    little_cup
        11
    little_cup  
       2016-12-27 11:48:11 +08:00
    另外楼上说的 N 以后权限收紧的情形也必须考虑。
    paradoxs
        12
    paradoxs  
       2016-12-27 11:49:42 +08:00
    怎么可能让你遍历? 隐私还要不要了。。
    Arthar
        13
    Arthar  
    OP
       2016-12-27 11:51:26 +08:00
    @little_cup 不是什么硬性需求,纯粹是用开源播放器做 demo 玩的,目前就是自己遍历的效率有些低才想有没有地方可以提高
    Arthar
        14
    Arthar  
    OP
       2016-12-27 11:52:18 +08:00
    @little_cup 权限适配是另一个问题了
    zhouquanbest
        15
    zhouquanbest  
       2016-12-27 11:55:59 +08:00
    还记得 Keep 当年做这个功能 SB 到在每个文件夹下放了他的索引文件。。。。
    这种流氓实现就别干了吧
    Arthar
        16
    Arthar  
    OP
       2016-12-27 12:28:51 +08:00
    @besto 边扫边显示确实是个好主意
    Arthar
        17
    Arthar  
    OP
       2016-12-27 12:35:38 +08:00
    @zhouquanbest 电脑系统上不是还存在着的 Thumbs.db 么- -
    lfk0000
        18
    lfk0000  
       2016-12-27 12:56:20 +08:00
    借贴求安卓上类似 win 下 everything 的软件。。。(我还以为本帖是在说这个呢。。。
    xiandao7997
        19
    xiandao7997  
       2016-12-27 13:11:43 +08:00
    @lfk0000 不一定能有吧。。 everything 利用了 NTFS 的一些特性,安卓上有没有类 everything 的软件要看安卓的文件系统有没有类似的特性
    AnonymousID
        20
    AnonymousID  
       2016-12-27 13:45:24 +08:00 via Android   1
    @xiandao7997 安卓上有 everything 这个软件的哦
    xiandao7997
        21
    xiandao7997  
       2016-12-27 13:46:46 +08:00 via Android
    xiandao7997
        22
    xiandao7997  
       2016-12-27 13:47:47 +08:00 via Android
    @AnonymousID 作用是全局快速搜索文件吗?
    Chrisplus
        23
    Chrisplus  
       2016-12-27 14:04:15 +08:00
    如果是自己去扫的话,怎么扫都快不了。 Android 提供的方案还有一些第三方的软件与库很多都是通过维护索引加上通知接收计划任务等方式完成的。
    pcatzj
        24
    pcatzj  
       2016-12-27 14:28:04 +08:00
    以前有个播放器(忘了是什么了),只会默认扫描 Video 这种多媒体文件夹,其他的就需要用户手动选择路径了,我感觉这样还是比较合理的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3362 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:41 PVG 12:41 LAX 21:41 JFK 00:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86