`
119568242
  • 浏览: 426958 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

[转]Android文件管理器介绍

 
阅读更多

 

转自:http://www.linuxidc.com/Linux/2011-10/44521.htm

 

今天拿这个改了一个 路径选择器

=======================================

1.     Android文件管理器介绍

Android系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要,就必须借助三方开发的资源管理器,常用的有AndExplorer等。这种情况下发布后,用户还需要安装依赖的软件,非常麻烦。下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。

 

2.     相关知识

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

 

3.     例程

 

1)         功能

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

 

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

 

免费下载地址在 http://linux.linuxidc.com/

 

用户名与密码都是www.linuxidc.com

 

具体下载目录在 /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<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文件管理器

    以下是关于"Android文件管理器"的相关知识点: 1. **文件操作**: - **创建文件**:用户可以通过文件管理器创建新的文本文件、图片文件或任何其他类型的文件。这通常涉及到选择文件类型、输入文件名并指定保存位置...

    Android文件管理器源码

    Android文件管理器(增加了文件夹复制移动,下载资源暂停删除等,以及复制过程中的可视化进程)是一个基于Android开发的应用,包含常用文件操作以及文件下载功能,文件操作包括打开文件夹和打开各类的文件(apk、avi...

    android 文件管理器

    通过分析这些文件,我们可以了解到Android文件管理器的构建流程、界面设计、权限控制以及资源管理等方面的知识。理解并掌握这些内容对于Android开发者来说,不仅可以提升对Android系统底层运作的理解,也有助于构建...

    android安卓文件管理器

    在Android文件管理器中,文件通常按照类型(如图片、音频、视频、文档)进行分类,便于用户查找和管理。有的管理器还支持自定义视图,如网格、列表或详细信息视图。 5. 文件安全与隐私: 文件管理器可以设置密码...

    android文件管理器源代码

    本文将深入解析"android文件管理器源代码",介绍关键概念、设计思路以及源代码中的核心功能。 一、Android 文件系统基础 Android系统采用Linux内核,因此其文件系统遵循Unix风格,主要包含以下目录: 1. /data:...

    Android 文件管理器

    Android 文件管理器是一款用于在Android设备上浏览、操作和管理文件的应用程序。它允许用户查看、复制、移动、删除、重命名以及分享存储在设备内部或外部存储卡上的文件。这款应用的源码对于Android开发者来说是宝贵...

    android 文件管理器实现

    本文将详细讲解如何实现一个基础的Android文件管理器,涵盖文件夹浏览、文件拷贝复制等功能。 首先,我们需要创建一个新的Android项目,并在`AndroidManifest.xml`中添加必要的权限,如读写权限: ```xml ...

    Android文件管理器源代码

    让我们一起探讨一下Android文件管理器背后的关键知识点。 1. **文件系统**:Android系统基于Linux内核,因此它使用的是Linux文件系统,如EXT4或F2FS。这些文件系统遵循Unix文件权限模型,包括读、写、执行权限,...

    android文件管理器源码

    android系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要. 下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。本代码为简单的文件管理器的实现,可独立...

    Android 文件管理器源码

    这里我们关注的是一个开源的Android文件管理器源码,它具备读取SD卡的功能。对于想要深入理解Android系统文件操作或希望自定义文件管理应用的开发者来说,这是一个宝贵的资源。 首先,我们需要了解Android的文件...

    Android-一个开源的MaterialDesign文件管理器适用于Android5.0

    【Android 开源 MaterialDesign 文件管理器】 在 Android 平台上,Material Design 是一套官方推荐的设计规范,它提供了统一且富有表现力的用户界面设计指南。这个开源项目——"Android-一个开源的MaterialDesign...

    android文件管理系统

    Android文件管理器还具备其他高级功能,例如共享文件、压缩和解压缩文件、查看各种文件类型的预览,以及通过网络访问远程存储(如FTP、SMB等)。这些特性使得用户能够全面地控制和管理他们的数据。 在实际使用中,...

    Android 文件管理器源码.zip

    1. **Android 应用开发基础**:Android文件管理器源码展示了如何构建一个完整的Android应用,包括布局设计、Activity管理、Intent使用等基础知识。 2. **文件操作API**:源码中会包含对`java.io`和`java.nio`包的...

    android文件管理器

    本文将深入探讨“android文件管理器”的核心功能以及如何实现这些功能,特别是如何获取手机上所有安装的应用及其关键信息。 首先,我们要理解Android应用程序的基本结构。每个Android应用都是由一系列组件构成的,...

Global site tag (gtag.js) - Google Analytics