Android 关于如何弄出一个正常好用的文件管理器.

1.文件管理器的选择
由于本人是一个懒人,而且又不是很喜欢写重复的轮子,更喜欢把人家的轮子拿过来改一波。所以我直接选择Start最高的兄弟的文件管理器.

https://github.com/fishwjy/MultiType-FilePicker
这里其实可以自己写一下可能自己的思路,大致上应该是RecycView去配上查找所有文件然后进行分类的这样的思路,当然这里FilePicker寻找的文件搭配上的Android自带的媒体库,这样就不用那么麻烦了…
在这里插入图片描述

2.FilePicker修改文件后不更新
查了很多地方其实都是因为FilePicker是根据Android自带媒体库(数据库)没有更新导致的,所以就算你下载 OR UPLoad文件到你Android设备上也是没有任何改变的,你重启一下之后,就发现啥都有了…神奇~,这是因为Android重启后会自动刷新一次自己的媒体库.

3.手动刷新媒体库
不知道为什么现在的好多好多方法仍然还在发广播,而且也没有出来说一些新的方法,导致这里我卡了挺久的。以前的发广播的方法我就不说了,这里根本就没啥用。
主要还是靠MediaScannerConnection这个类.
可以直接调用MediaScannerConnection.scanFile(context,file,null,null);这个静态方法。当然这里有一个问题,file只是单独一个文件,是否可以是一个目录file?
结果是:可以,但是没那么可以

4.刷新sdcard某一文件类型的媒体库
上面为什么说,只是感觉可以呢?。因为如果是一个目录的file,你新增的文件确实是可以更新到媒体库,但是我突发奇想。用文件管理器去修改文件名是否也会更新.答案是不会…emmm 0 0,但是如果直接定位到具体的file,那是可以正常更新的…
在这里插入图片描述
这就是导致了我们必须要将sdcard里面的文件全部拿出来,然后一个个好好的刷新一遍。
代码很少,注意了~!!
FilePicker的加入我就不写了,你们自己弄哈~

   List<File> fileList =new ArrayList<>();
    List<String> fileStringList = new ArrayList<>();
    //扫描所有文件
    private void scan(File file,String Extension) {
        if (file.isFile()) {
            if (file.getPath().substring(file.getPath().length() - Extension.length()).equals(Extension)) //判断扩展名
            fileList.add(file);
            return;
        }
        File[] files = file.listFiles();
        if (files == null) {
            return;
        }
        for (File f : file.listFiles()) {
            scan(f,Extension);
        }
    }

public void onPickDoc() {

        Log.d(TAG, "onPickDoc: "+System.currentTimeMillis());
        scan(Environment.getExternalStorageDirectory(),"mp3");
        for(File d:fileList){
            Log.d(TAG, "onPickDoc: 试一下这个牛逼的循环先"+d.getPath());
            fileStringList.add(d.getPath());
        }
        Log.d(TAG, "onPickDoc: "+System.currentTimeMillis());

        String[] cc = new String[fileStringList.size()];
        fileStringList.toArray(cc);
        for(String d:cc){
            Log.d(TAG, "onPickDoc: kkkkkkkkkk_popo4:--->:"+d);
        }

        MediaScannerConnection.scanFile(this, cc, null, new MediaScannerConnection.OnScanCompletedListener() {
            @Override
            public void onScanCompleted(String path, Uri uri) {
                Log.d(TAG, "onScanCompleted: ????" +path);
                Log.d(TAG, "onScanCompleted: ????" +uri.getPath());

            }
        });

        String[] zips = {"zip", "rar"};
        String[] pdfs = {"aac"};
        String[] Mp3 = {"mp3"};
        int maxCount = MAX_ATTACHMENT_COUNT - photoPaths.size();
        if ((docPaths.size() + photoPaths.size()) == MAX_ATTACHMENT_COUNT) {
            Toast.makeText(this, "Cannot select more than " + MAX_ATTACHMENT_COUNT + " items",
                    Toast.LENGTH_SHORT).show();
        } else {
            for(Uri d:docPaths) {
                Log.d("TAG", "onPickDoc: xxxxx" + d.getPath());
            }
            Log.d("TAG", "onPickDoc: sadfasdfweqrqwerqwer");
            FilePickerBuilder.getInstance()
                    .setMaxCount(1)
                    .setSelectedFiles(docPaths)

                    .setActivityTheme(R.style.FilePickerTheme)
                    .setActivityTitle("Please select doc")
//                    .setImageSizeLimit(5) //Provide Size in MB
//                    .setVideoSizeLimit(20)
                    .addFileSupport("ZIP", zips)
                    .addFileSupport("AAC", pdfs, R.drawable.pdf_blue)
                    .addFileSupport("mp3", Mp3, R.drawable.pdf_blue)

                    .showFolderView(false)
                    .enableDocSupport(true)
                    .enableSelectAll(true)
                    .sortDocumentsBy(SortingTypes.NAME)
                    .withOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
                    .pickFile(this);
        }
    }

好了,运功完毕,如果对你们有用,就希望点个赞吧~祝天下打工崽们头发茂盛茂盛.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值