设为首页 加入收藏

TOP

Android文件管理器的源码实现(一)
2014-11-24 12:23:34 来源: 作者: 【 】 浏览:3
Tags:Android 文件管理器 源码 实现

2. 相关知识
文件管理器一般以固定大小的对话框的方式出现,使用ListView作为文件目录的显示载体。点选目录测进入,点选文件则将所选择文件的Uri返回给调用它的Activity。ListView的使用是实现这个功能的重点。


3. 例程


1) 功能
当用户点击按钮时,调出固定大小的文件管理器,默认显示的目录是SD卡的根目录。用户选择文件后,在界面上显示该文件的路径。


2) 可从此处下载可独立运行的代码


具体下载目录在 /pub/Android源码集锦/2011年/10月/Android文件管理器的源码实现/



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> 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> getData() { // 将目录数据填充到链表中
List> list = new ArrayList>();
Map map = null;
File f = new File(mDir); // 打开当前目录
File[] files = f.listFiles(); // 获取当前目录中文件列表

if (!mDir.equals("/sdcard")) { // 不充许进入/sdcard上层目录
map = new HashMap(); // 加返回上层目录项
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();
map.put("title", files[i].getName(

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android图片大小调整动态实现方法 下一篇Android中对大图的处理的实现和分..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)