Android开发的文件浏览器

openkk 12年前

源码下载地址:

 

http://download.csdn.net/detail/nuptboyzhb/4485545

 

该文件浏览器极易扩展,文件浏览器实现的功能是:主UI显示用户选择的文件的路径。

完成这一功能的主要是FXExplore.java文件。如下图解析:

Android开发的文件浏览器

SelectFilesActivity.java文件

 

package com.example.com.njupt.zhb.selectfiles;    import android.os.Bundle;  import android.app.Activity;  import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter;  import android.util.Log;  import android.view.Menu;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  import android.widget.TextView;  import android.widget.Toast;  /*   @作者:郑海波 http://blog.csdn.net/nuptboyzhb   */  public class SelectFilesActivity extends Activity {      private Button selectBtn;      private TextView pathView;      private static final String DYNAMICACTION = "njupt.zhb.sendpath";      private OnClickListener listener=null;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_select_files);          listener=new OnClickListener() {          @Override     public void onClick(View v) {      // TODO Auto-generated method stub      Intent intent=new Intent(SelectFilesActivity.this,FSExplorer.class);      startActivity(intent);     }    };    selectBtn=(Button)findViewById(R.id.selectFilesBtn);    pathView=(TextView)findViewById(R.id.filepath);    selectBtn.setOnClickListener(listener);    IntentFilter filter_dynamic = new IntentFilter();    filter_dynamic.addAction(DYNAMICACTION);    registerReceiver(dynamicReceiver, filter_dynamic);      }      // 2 自定义动态广播接收器,内部类,接收选择的路径    private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() {          @Override     public void onReceive(Context context, Intent intent) {      Log.e("MainActivity", "接收自定义动态注册广播消息");      if(intent.getAction().equals(DYNAMICACTION)){       String path = intent.getStringExtra("path");       Toast.makeText(context, path, Toast.LENGTH_SHORT).show();       String text="Path:"+path;       pathView.setText(text);      }     }    };      @Override      public boolean onCreateOptionsMenu(Menu menu) {          getMenuInflater().inflate(R.menu.activity_select_files, menu);          return true;      }  }

FXExplore.java文件


 

package com.example.com.njupt.zhb.selectfiles;  import java.io.File;  import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;    import android.R.string;  import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.util.Log;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View;  import android.widget.AdapterView;  import android.widget.ListView;  import android.widget.SimpleAdapter;  import android.widget.Toast;  import android.widget.AdapterView.OnItemClickListener;  /*  @作者:郑海波 http://blog.csdn.net/nuptboyzhb  参考:Google Android开发入门与实战  */  public class FSExplorer extends Activity implements OnItemClickListener {   private static final String TAG = "FSExplorer";   private static final int IM_PARENT = Menu.FIRST + 1;   private static final int IM_BACK = IM_PARENT + 1;   private static final String DYNAMICACTION = "njupt.zhb.sendpath";   ListView itemlist = null;   String path = "/";   List<Map<String, Object>> list;   public void sendPathToActivity(String path){    Intent intent = new Intent();    intent.setAction(DYNAMICACTION);    intent.putExtra("path", path);    sendBroadcast(intent);   }   @Override   public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.files);    setTitle("文件浏览器");    itemlist = (ListView) findViewById(R.id.itemlist);    refreshListItems(path);   }      /*根据path更新路径列表*/   private void refreshListItems(String path) {    setTitle("文件浏览器 > "+path);    list = buildListForSimpleAdapter(path);    SimpleAdapter notes = new SimpleAdapter(this, list, R.layout.file_row,      new String[] { "name", "path" ,"img"}, new int[] { R.id.name,        R.id.desc ,R.id.img});    itemlist.setAdapter(notes);    itemlist.setOnItemClickListener(this);    itemlist.setSelection(0);   }      /*根据路径生成一个包含路径的列表*/   private List<Map<String, Object>> buildListForSimpleAdapter(String path) {    File[] files = new File(path).listFiles();    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(files.length);    Map<String, Object> root = new HashMap<String, Object>();    root.put("name", "/");    root.put("img", R.drawable.file_root);    root.put("path", "go to root directory");    list.add(root);    Map<String, Object> pmap = new HashMap<String, Object>();    pmap.put("name", "..");    pmap.put("img", R.drawable.file_paranet);    pmap.put("path", "go to paranet Directory");    list.add(pmap);    for (File file : files){     Map<String, Object> map = new HashMap<String, Object>();     if(file.isDirectory()){      map.put("img", R.drawable.directory);     }else{      map.put("img", R.drawable.file_doc);     }     map.put("name", file.getName());     map.put("path", file.getPath());     list.add(map);    }    return list;   }   /*跳转到上一层*/   private void goToParent() {    File file = new File(path);    File str_pa = file.getParentFile();    if(str_pa == null){     Toast.makeText(FSExplorer.this,       "已经是根目录",       Toast.LENGTH_SHORT).show();     refreshListItems(path);     }else{     path = str_pa.getAbsolutePath();     refreshListItems(path);     }   }      /*实现OnItemClickListener接口*/   @Override   public void onItemClick(AdapterView<?> parent, View v, int position, long id) {    Log.i(TAG, "item clicked! [" + position + "]");    if (position == 0) {     path = "/";     refreshListItems(path);    }else if(position == 1){     goToParent();    } else {     path = (String) list.get(position).get("path");     File file = new File(path);     if (file.isDirectory())      refreshListItems(path);     else     {      Toast.makeText(FSExplorer.this,path,Toast.LENGTH_SHORT).show();      sendPathToActivity(path);      finish();     }         }     }    }


Files.xml文件

 

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical" android:layout_width="fill_parent"   android:layout_height="fill_parent">     <ListView        android:layout_width="fill_parent"    android:layout_height="fill_parent"     android:id="@+id/itemlist" />  </LinearLayout>

File_row.xml文件

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"      android:id="@+id/vw1"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:padding="4px"      android:orientation="horizontal">            <ImageView android:id="@+id/img"          android:layout_width="32px"          android:layout_margin="4px"          android:layout_height="32px"/>        <LinearLayout          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:orientation="vertical">            <TextView android:id="@+id/name"              android:textSize="18sp"              android:textStyle="bold"              android:layout_width="fill_parent"              android:layout_height="wrap_content"/>            <TextView android:id="@+id/desc"              android:textSize="14sp"              android:layout_width="fill_parent"              android:paddingLeft="10px"              android:layout_height="wrap_content"/>        </LinearLayout>    </LinearLayout>


AndroidManifest.xml文件

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.example.com.njupt.zhb.selectfiles"      android:versionCode="1"      android:versionName="1.0" >        <uses-sdk          android:minSdkVersion="4"          android:targetSdkVersion="15" />        <application          android:icon="@drawable/ic_launcher"          android:label="@string/app_name"          android:theme="@style/AppTheme" >          <activity              android:name=".SelectFilesActivity"              android:label="@string/title_activity_select_files" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                    <category android:name="android.intent.category.LAUNCHER" />              </intent-filter>          </activity>          <activity android:name=".FSExplorer"> </activity>      </application>    </manifest>
转自:http://blog.csdn.net/nuptboyzhb/article/details/7844893