1. android文件管理器介绍
android系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要,就必须借助三方开发的资源管理器,常用的有AndExplorer等。这种情况下发布后,用户还需要安装依赖的软件,非常麻烦。下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。
2. 相关知识
文件管理器一般以固定大小的对话框的方式出现,使用ListView作为文件目录的显示载体。点选目录测进入,点选文件则将所选择文件的Uri返回给调用它的Activity。ListView的使用是实现这个功能的重点。
3. 例程
1) 功能
当用户点击按钮时,调出固定大小的文件管理器,默认显示的目录是SD卡的根目录。用户选择文件后,在界面上显示该文件的路径。
2) 可从此处下载可独立运行的代码
http://download.csdn.net/detail/jrcisme/4163862
3) 核心代码及说明
a) 调用资源管理器
Intent intent = new Intent();
intent.putExtra("explorer_title",
getString(R.string.dialog_read_from_dir)); // 设置文件管理器标题
intent.setDataAndType(Uri.fromFile(new File("/sdcard")), "*/*"); // 设置起始文件夹和文件类型
intent.setClass(MyActivity.this, ExDialog.class);
startActivityForResult(intent, REQUEST_EX);
b) 从资源管理器接收数据
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
String path;
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_EX) {
Uri uri = intent.getData(); // 接收用户所选文件的路径
TextView text = (TextView) findViewById(R.id.text);
text.setText("select: " + uri); // 在界面上显示路径
}
}
}
c) 文件管理器类的实现
public class ExDialog extends ListActivity { // ListActivity自带List控件
private List<Map<String, Object>> mData;
private String mDir = "/sdcard";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = this.getIntent();
Bundle bl = intent.getExtras();
String title = bl.getString("explorer_title"); // 接收标题内容
Uri uri = intent.getData(); // 接收起始目录
mDir = uri.getPath(); // 设置起始目录
setTitle(title);
mData = getData(); // 向链表mData填充目录的数据
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter); // 设置MyAdapter类为ListView控件提供数据
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay();
LayoutParams p = getWindow().getAttributes();
p.height = (int) (d.getHeight() * 0.8);
p.width = (int) (d.getWidth() * 0.95);
getWindow().setAttributes(p); // 设置对话框为固定大小,不因进出目录变化
}
private List<Map<String, Object>> getData() { // 将目录数据填充到链表中
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = null;
File f = new File(mDir); // 打开当前目录
File[] files = f.listFiles(); // 获取当前目录中文件列表
if (!mDir.equals("/sdcard")) { // 不充许进入/sdcard上层目录
map = new HashMap<String, Object>(); // 加返回上层目录项
map.put("title", "Back to ../");
map.put("info", f.getParent());
map.put("img", R.drawable.ex_folder);
list.add(map);
}
if (files != null) { // 将目录中文件填加到列表中
for (int i = 0; i < files.length; i++) {
map = new HashMap<String, Object>();
map.put("title", files[i].getName());
map.put("info", files[i].getPath());
if (files[i].isDirectory()) // 按不同类型显示不同图标
map.put("img", R.drawable.ex_folder);
else
map.put("img", R.drawable.ex_doc);
list.add(map);
}
}
return list;
}
// 响应用户点击列表项的事件
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.d("MyListView4-click", (String) mData.get(position).get("info"));
if ((Integer) mData.get(position).get("img") == R.drawable.ex_folder) {
mDir = (String) mData.get(position).get("info");
mData = getData(); //点击目录时进入子目录
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter);
} else { // 点击文件时关闭文件管理器,并将选取结果返回
finishWithResult((String) mData.get(position).get("info"));
}
}
public final class ViewHolder { // 定义每个列表项所含内容
public ImageView img; // 显示图片ID
public TextView title; // 文件目录名
public TextView info; // 文件目录描述
}
public class MyAdapter extends BaseAdapter { // 实现列表内容适配器
private LayoutInflater mInflater;
public MyAdapter(Context context) {
this.mInflater = LayoutInflater.from(context);
}
public int getCount() { // 获取列表项个数
return mData.size();
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
// 设置每个列表项的显示
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.listview, null); // 设置列表项的布局
holder.img = (ImageView) convertView.findViewById(R.id.img);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.info = (TextView) convertView.findViewById(R.id.info);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.img.setBackgroundResource((Integer) Data.get(position).get(
"img")); // 根据位置position设置具体内容
holder.title.setText((String) Data.get(position).get("title"));
holder.info.setText((String) mData.get(position).get("info"));
return convertView;
}
}
private void finishWithResult(String path) {
Bundle conData = new Bundle();
conData.putString("results", "Thanks Thanks");
Intent intent = new Intent(); // 以intent的方式将结果返回调用类
intent.putExtras(conData);
Uri startDir = Uri.fromFile(new File(path));
intent.setDataAndType(startDir,
"vnd.android.cursor.dir/lysesoft.andexplorer.file");
setResult(RESULT_OK, intent);
finish();
}
};
分享到:
相关推荐
android系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要. 下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。本代码为简单的文件管理器的实现,可独立...
本人编写的一套完整的android文件管理器。实现了所有基本功能支持关键字查询多选等功能,注释详细。仅供学习。
很实用的源码,包含文件管理器的基本实现思路和原理,及其方式 一、首先得到手机SDCard跟目录及所有文件对象 二、将这些文件目录信息包装进Adapter 三、将Adapter数据设置给ListView控件显示
android课程设计Android studio实现的一款作业提交管理APP源码+文档+PPT,已获高分通过项目。 使用Android studio实现一款作业提交管理APP,该软件可以实现三种用户登录。 学生端可以查看课表,提交作业以及小组讨论...
Android文件管理器源码实现,基本实现手机自带File功能。
本次带来的文件管理器,能够对SD卡的目录进行管理。主要功能包括新建文件(夹)、查看文件(夹)、搜索文件(夹)、删除文件(夹)、回到根目录。涉及知识点包括动态申请权限、自定义Dialog、自定义菜单、文件系统...
基于android实现的仓库管理系统案例,有着良好的界面,有详细的源码,并有注释,有分析文档,可以学到android数据库开发等,学习android必备哦
Android应用源码安卓源码(172个合集),可以做为你的学习参考。 365MobileSecretary v1.0.6(365手机助手AIDL) 888个经典 Logo.rar AdXmpp(Openfire+asmack+spark) .zip AidlDemo(简单aidl的例子) aidl跨进程调用....
学生信息管理系统 人脸识别签到system 实现学生信息的管理,以及学生上传头像,注意:必须上传人脸头像,不然会上传失败,上传头像后,实现了人脸识别签到功能, 数据库使用的是mysql数据库。。。
Android开发安卓大作业基于手机定位的Android考勤系统源码+项目文档 本项目以师生的签到考勤需求为背景,基于Android平台开发服务师生的电子签到系统。该系统基于Android平台的地址服务功能,采用地址聚类算法来实现...
Android Studio实现个人记账系统源码。基于安卓基础知识点开发的个人记账工具,其中包括记录当天收支情况,计算当天以及当月共收支总钱数,能查看历史账单,能对于每月收支情况进行图标分析,百分比分析, 能够搜索...
基于Android源码实现的FileManager文件管理应用,源码中有丰富的注释,对android新手帮助挺大。
例如,我们使用了Android Studio作为开发工具,它提供了一系列的功能和工具,如代码编辑器、调试器和模拟器,使得开发人员可以快速开发和测试安卓应用。我们还使用了Java作为主要的编程语言,它是安卓应用开发的主流...
Android studio成品项目 点菜系统 源码 apk 可以实现登录注册功能,菜品喜欢,联系以及账户充值功能,包括源码以及apk,单机无联网功能,含项目报告。
基于android平台的学生选课系统的设计与实现 (源码 + 说明文档 + 演示视频) 4.系统设计实现 26 4.1 开发环境搭建 26 4.1.1 window系统安装java 26 4.1.2安装配置Android Studio 31 4.1.3创建Android Studio工程 31 ...
JAVA版WMS仓储管理系统源码 物流仓库管理系统源码 源码介绍: 基于JAVA开发的物流仓库管理系统(支持自营和第三方),包含PDA端和WEB端。 WMS在经过多家公司上线运行后,为了降低物流仓储企业的信息化成本...
Android应用源码可以按音乐视频图片分类浏览的安卓文件浏览器