首页 >> 知识 >> androids Studio实现文件管理器

androids Studio实现文件管理器

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、程序运行时申请权限3、查看文件4、删除文件5、搜索文件6、新建文件 四、运行演示五、源码获取

一、项目概述

本次带来的文件管理器,能够对SD卡的目录进行管理。主要功能包括新建文件(夹)、查看文件(夹)、搜索文件(夹)、删除文件(夹)、回到根目录。涉及知识点包括动态申请权限、自定义Dialog、自定义菜单、文件系统操作、适配器等。

二、开发环境

三、详细设计 1、布局设计

草莓视频在线观看APP先看下主页面的布局:父标签是RelativeLayout,相对布局用来布置位置是最适合的。最上方使用Toolbar替代原生的ActionBar,在替代前需要在theme中将主题设置为Theme.MaterialComponents.Light.NoActionBar,在MainActivity中加上代码:

// 绑定并设置工具栏 Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar);

然后放一个TextView显示文件路径,接着是最常用的ListView显示文件列表,最后是一个父标签为LinearLayout的布局,里面描绘了一个搜索框。

草莓视频在线观看APP再看下自定义对话框的布局,应该一目了然,就是让用户输入文件名称,然后新建文件。

2、程序运行时申请权限

androids6.0以后需要在运行时申请读写外部存储的权限(危险权限)。首先在androidsManifest.xml中加入草莓视频在线观看APP需要的权限。

运行时权限的核心在于程序运行过程中由用户授权草莓视频在线观看APP去执行某些危险操作,程序是不可以擅自做主去执行这些危险操作的。因此,第一步就是先判断用户是不是已经给过草莓视频在线观看APP授权了,借助的是ContextCompat.checkSelfPermission()方法。checkSelfPermission()方法接收两个参数,第一个参数是Context,也就是上下文,第二个参数是具体的权限名,比如读外存的权限名就是Manifest.permission.READ_EXTERNAL_STORAGE,然后草莓视频在线观看APP使用方法的返回值和PackageManager.PERMISSION_GRANTED做比较,相等就说明用户已经授权,不等就表示用户没有授权。

如果已经授权的话就简单了,直接去执行查看文件的逻辑操作就可以了,草莓视频在线观看APP把这部分操作封装到了initFile()方法当中。如果没有授权的话,则需要调用ActivityCompat.requestPermissions()方法来向用户申请权授权,requestPermissions()方法接收3个参数,第一个参数是Activity实例,第二个参数是一个String数组,第三个参数是请求码,只要是唯一值就可以了,这里传入了1。

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int myPermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE); if (myPermission != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "请求读取SD卡权限", Toast.LENGTH_SHORT).show(); // 动态申请权限,请求码为1 ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } else { initFile(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 同意权限则初始化文件列表 initFile(); } else { // 拒绝权限 Toast.makeText(this, "你拒绝了读写SD卡权限", Toast.LENGTH_SHORT).show(); // 退出应用 finish(); } break; default: break; } } 3、查看文件

当用户同意权限之后,先判断手机中是否装载了sd卡,如果有sd卡则获取SD卡的根目录,设置当前父目录为root,获取当前目录下的所有文件。然后for循环获取所有的文件的键值对,添加到列表中,再创建和设置适配器。就大功告成了。

private void initFile() { // 判断手机中是否装载了sd卡 boolean isLoadSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); if (isLoadSDCard) { // 获取SD卡的根目录 root = Environment.getExternalStorageDirectory(); // 当前父目录为root currentParent = root; // 获取当前目录的所有文件 currentFiles = currentParent.listFiles(); // 加载列表 inflatelv(currentFiles); } else { Toast.makeText(this, "SD卡没有被装载", Toast.LENGTH_SHORT).show(); } // 设置列表子项监听器 setListener(); } 4、删除文件

对于文件夹而言,需要先删除目录下所有文件,然后删除当前文件夹;对于文件而言,直接删除当前文件。使用deleteFile()进行文件删除,接收参数为文件对象。在删除之后需要重新设置适配器。

// 如果是文件夹先删除目录下所有文件 if (!currentFiles[i].isFile()) { File[] files = currentFiles[i].listFiles(); for (int index = 0; index
网站地图