Android中文件选择器的实现

Android多功能文件选择器,支持访问Android/data(obb)等系统文件夹 Android文件选择器,高度可定制化,支持访问系统data/obb文件夹 顶部导航栏可点击 长按条目可选择 可自定义拓展功能 gradle:project 中 gradle:app 中 Manifest中 依赖与权限设置完成后 在你的Activity中 获取返回的数据 自定义文件显示和图标 自定义图标及字体 类与方法 FileSelectorTheme 下面图片中给出了UI的属性作用位置的序号:表中每个属性均有set方法,并有默认的属性,故该设置不是必须的设置。接口抽象方法:onclick 阅读详情

                                                              


                                                                                         转载请注明出处:http://blog.youkuaiyun.com/qinjuning

 


        今天给大家分享下文件选择器的作用 , 具体就是获取用户在在SD卡选中的文件/文件夹路径 ,类似于C#中

   OpenFileDialog控件(对C#的一站式开发还是念念不忘)。功能实现起来比较简单,主要是帮助大家节省开发时间。

 

        网上流传较广的一个成品如下 <[Android实例] 文件选择器>, 本文也是根据上面的成品修改而成,使其更易

  理解,效率更高。 除此之外,主要特色有:

             1、我们监听了用户按下Back键的事件,使其返回上一层目录;

             2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。

 

 知识点一、 File 类的使用

        文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过Java File类来实现的。

         关于File类的使用,请参考如下博客:

                                            <<来自java文档 File类>>

                                       <<Java File类>> 


 知识点二、调用方法说明   

         使用了startActivityForResult()发起调用以及onActivityResult()方法接受回调后的信息。

 

       截图如下:


                                                 



 其他的也没什么好说了,大家看看代码注释吧~~  so easy  - - 。


  FileChooserActivity.java 实现文件选择的类 。

       

public class CopyOfFileChooserActivity extends Activity {
	
	private String mSdcardRootPath ;  //sdcard 根路径
	private String mLastFilePath ;    //当前显示的路径
	
	private ArrayList<FileInfo> mFileLists  ;
	private FileChooserAdapter mAdatper ;
	
	//配置适配器
	private void setGridViewAdapter(String filePath) {
		updateFileItems(filePath);
		mAdatper = new FileChooserAdapter(this , mFileLists);
		mGridView.setAdapter(mAdatper);
	}
	//根据路径更新数据,并且通知Adatper数据改变
	private void updateFileItems(String filePath) {
		mLastFilePath = filePath ;
		mTvPath.setText(mLastFilePath);
		
		if(mFileLists == null)
			mFileLists = new ArrayList<FileInfo>() ;
		if(!mFileLists.isEmpty())
			mFileLists.clear() ;
		
		File[] files = folderScan(filePath);
		if(files == null) 
			return ;
		for (int i = 0; i < files.length; i++) {
			if(files[i].isHidden())  // 不显示隐藏文件
				continue ;
			
			String fileAbsolutePath = files[i].getAbsolutePath() ;
			String fileName = files[i].getName();
		    boolean isDirectory = false ;
			if (files[i].isDirectory()){
				isDirectory = true ;
			}
		    FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ;
			//添加至列表
		    mFileLists.add(fileInfo);
		}
		//When first enter , the object of mAdatper don't initialized
		if(mAdatper != null)
		    mAdatper.notifyDataSetChanged();  //重新刷新
	}
	//获得当前路径的所有文件
	private File[] folderScan(String path) {
		File file = new File(path);
		File[] files = file.listFiles();
		return files;
	}
	private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() {
		public void onItemClick(AdapterView<?> adapterView, View view, int position,
				long id) {
			FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));
			if(fileInfo.isDirectory())   //点击项为文件夹, 显示该文件夹下所有文件
				updateFileItems(fileInfo.getFilePath()) ;
			else if(fileInfo.isPPTFile()){  //是ppt文件 , 则将该路径通知给调用者
			    Intent intent = new Intent();
			    intent.putExtra(EXTRA_FILE_CHOOSER, fileInfo.getFilePath());
			    setResult(RESULT_OK , intent);
			    finish();
			}
			else {   //其他文件.....
				toast(getText(R.string.open_file_error_format));
			}
		}
	};
	public boolean onKeyDown(int keyCode , KeyEvent event){
		if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode()
			== KeyEvent.KEYCODE_BACK){
			backProcess();   
			return true ;
		}
		return super.onKeyDown(keyCode, event);
	}
	//返回上一层目录的操作
	public void backProcess(){
		//判断当前路径是不是sdcard路径 , 如果不是,则返回到上一层。
		if (!mLastFilePath.equals(mSdcardRootPath)) {  
			File thisFile = new File(mLastFilePath);
			String parentFilePath = thisFile.getParent();
			updateFileItems(parentFilePath);
		} 
		else {   //是sdcard路径 ,直接结束
			setResult(RESULT_CANCELED);
			finish();
		}
	}
}

    

    界面依旧很丑陋,囧 ,大家可以根据需要在此基础上添加功能 。 示例代码下载地址:

                          

                 http://download.youkuaiyun.com/detail/qinjuning/4908609  (源代码下载)





 

Android文件选择器 自动申请存储权限,支持 Android4.4 ~ 13,再也不用为了适配各种版本而苦恼了,快速集成,一句代码搞定,完善的文档,支持无root权限访问和操作Android/data和Android/obb目录(适配Android 13),支持SD卡,高度自定义UI满足你的所有需求,使用非常灵活,支持国际化,对于Android文件选择你只需要关注你的业务代码即可其他的都交给它。Android/data和Android/obb目录访问和操作。自动申请存储权限(可以控制)安卓 4.4 ~ 13。 阅读详情

相关推荐

Android选择文件

文件上传获取文件绝对路径

hc982918683的博客 1473

Android简单的文件选择器

Android简单的文件选择器

GUOZIJUN01的博客 8094

通过文件选择器添加联系人

ec通过文件选择添加联系人

weixin_38337609的博客 751

从零开始实现一个兼容版本的Android文件选择器

此项目和之前发布的项目有些不同,之前都是基本的功能,不是基于 Activity 页面实现的,而类似文件选择,图片选择,除了功能的实现还需要处理 UI 相关的配置。在前面的一文中我就想把逻辑做一下封装,做成开箱即用的文件选择器,本来这功能是项目中自用的,UI 等都是自有的,如果要做开源出去,那么就要抽取功能与 UI 逻辑,设置可配置选项。分解一下实现步骤,如何自定义一个文件下载器呢?这样差不多就能完成一个基本的操作文件选择框架了。

chuyouyinghe的专栏 2616

知识见闻 - Salesforce公司发展史

不过,通过将自己开发的产品与公司收购的其它云产品进行结合,Salesforce可以为用户提供更多的产品种类,Salesforce可以继续强化自己的平台和产品套件属性,这一平台和套件的发展规模已经远远超出了一个单一的CRM的规模。他们围绕一个相对简单的产品向用户兜售云的概念,然后,他们开始开发其它产品,并寻找培育一个不断增长的生态系统的方法,最理想的情况是能驱动Salesforce的营收增长。现在,Salesforce通过打造更多的用例并改进自己产品的方式来直接应对竞争对手的竞争,从而捍卫自己现在的地位。

guoqx的专栏 1453

黑客渗透测试后门隐藏技术揭秘

本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。

m0_60781580的博客 1040

Android安卓实现原生文件选择器(浏览器)多选文件功能

转载请注明出处:codog_main的博客 前言   有时我们想选择文件,但是又懒得自己去写一个文件浏览器,使用安卓原生的文件选择器或引入第三方库无疑是最佳选择,因为写自己不喜欢的东西真的非常痛苦。   安卓开启系统原生文件浏览器的教程网上已经烂大街了,但是很少有文章提及如何进行多选文件。我们在开启原生的文件浏览器时,默认是单选的,即点击文件立即返回uri,想实现多选只需要加入语句:   inte...

codog_main的博客 9038

微信小程序使用TCP通信

最终目的:在微信小程序内实现对局域网发起TCP通信实现步骤:建立TCP服务 + 小程序发起通信。

Big_YiFeng的博客 5612

安卓php打开文件夹,Android_Android 文件选择的实现代码,打开文件选择器复制代码 代码 - phpStudy...

Android 文件选择的实现代码打开文件选择器private void showFileChooser() {Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("*/*");intent.addCategory(Intent.CATEGORY_OPENABLE);try {startActivityForRe...

weixin_42314860的博客 154

QProgressBar:常用接口、样式表及自定义进度条实现

在Qt开发中,QProgressBar 是一个非常常用的控件,用于显示任务的进度。无论是文件下载、数据处理还是其他耗时操作,QProgressBar 都能直观地展示当前进度。本文将详细介绍QProgressBar 的使用方法,包括常用接口、样式表设置,并额外补充一个自定义进度条的C++实现。

u011186532的专栏 1012

GPFS扩展技术原理(十一)-FMDN广播与EID加解密

GFPS扩展技术原理(十一)FMDN广播及EID加解密

十多年蓝牙协议软件开发,擅长蓝牙协议分析 935

也发一个自己实现的android简单文件选择器代码。支持多卡,排序

  一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡。。并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录。 利用Collections.sort方法进行排序。 代码如下: 1 package net.yunstudio.demo; 2 3 import java.i...

weixin_30242907的博客 116

【11】GD32H7xx MPU记录

GD32H7xx系列MPU内存保护单元模块的使用记录

madao1234的博客 877

Android 快速实现一个文件选择器

最近在应用当中需要能够就/sdcard 上面的文件进行选择后,上传.   就需要一个文件选择器来使用.   找了好些别人的代码,准备使用.发现实现的有些麻烦.或者说引用起来有些麻烦.就自己实现了一个.   本着简单易用的原则,就一个java搞定.(后来发现还是需要2个java 得有一个定义个公用的结构类.)   具体要求 /sdcard 是根目录.   只显示文件夹和

gzxin的专栏 935

【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现

简介QDM原理及其MATLAB代码实现

WW、forever的博客 5861

MFC Windows 程序设计[105]之彩色滚动条(附源码)

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。

hnjzfwy的博客 518

uniapp中支持安卓打开文件选择器,并导入Excel文件到本地数据库中的实现

【代码】uniapp中支持安卓打开文件选择器,并导入Excel文件到本地数据库中的实现。

m0_70721705的博客 354

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android实现价格排序0,也发一个自己实现的android简单文件选择器代码。支持多卡,排序...

1 packagenet.yunstudio.demo;23 importjava.io.File;4 importjava.text.Collator;5 importjava.util.ArrayList;6 importjava.util.Collections;7 importjava.util.Comparator;8 importjava.util.HashMap;9 importja...

weixin_42629522的博客 215

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 选择文件并返回地址,在Android中实现文件选择器,并将选定的文件复制到另一个位置...

我试图在我的Android项目中实现文件选择器.我迄今所能做的是:Intent chooseFile;Intent intent;chooseFile = new Intent(Intent.ACTION_GET_CONTENT);chooseFile.setType("*/*");intent = Intent.createChooser(chooseFile,"Choose a file");...

weixin_39786155的博客 513

C语言关系运算符详解:用法、优先级与实战常见错误

条件判断是编程语言中最基础也是最核心的语法之一,而关系运算符正是实现条件判断的基石。在C语言中,关系运算符用于比较两个值的大小或相等关系,其表达式结果是一个整数:真为1,假为0。这一设计贯穿于if分支、while循环等流程控制语句中,直接影响程序的执行逻辑。理解六个关系运算符(>、<、>=、<=、==、!=)的语义及优先级,是正确编写判断条件的前提。实际开发中,关系运算符广泛应用于成绩等级划分、闰年判断、输入校验、字符分类等场景,但需特别注意浮点数不能直接用==比较、==与=易混淆等工程问题。本文从零基础视

weixin_33797791的博客 474

Android 文件选择器获取文件路径

目录配置1.依赖引用2.AndroidManifest.xml配置具体使用1.xml文件2.检查权限3.使用文件选择器并获取路径4.FileUtil.java5.完整代码 配置 1.依赖引用 用于本人使用的API Level为30,所以在app目录下的build:gradle中导入的依赖为: implementation "androidx.core:core:1.3.2" 如果使用的稳定版本在28.0.0(因为28.0.0的稳定版本还是采用android.support)及以下时,根据具体情况导入对

Lyn4444的博客 4816
上一篇: Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
下一篇: Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍
qinjuning
博客等级 码龄18年 5288粉丝 43原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值