1. 程式人生 > >android 檔案管理器的原始碼實現

android 檔案管理器的原始碼實現

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檔案管理原始碼

/**************************************************** 大家都知道寫部落格會很累的,大熱天的。 請不要可憐你的滑鼠,(*^__^*) 嘻嘻…… **************************************

android 檔案管理原始碼實現

public class ExDialog extends ListActivity { // ListActivity自帶List控制元件          private List<Map<String, Object>> mData;          private Strin

android檔案管理需求分析之一

(部分初稿) 正在做一個android檔案管理器,程式碼基本完成,但由於一直以來面向過程開發的,到後期程式碼量不斷增大,Bug頻繁出現,修改程式碼變得非常繁瑣、困難。 於是我想從需求分析開始重新對專案進行整合、編碼。 算是第一次寫需求分析,必然會出現很多Bug,希望前輩們能

安卓 檔案管理-ListView實現

今天覆習一下ListView實現安卓檔案管理器,包括檔案的篩選、apk的安裝,以及BaseAdapter的應用等。 直接上程式碼: 應用實現部分 public class MainActivity extends ListActivity {

一個私人定製的PC端Android檔案管理

工欲善其事,必先利其器。 一個好的工具對能省不少體力活呢。 如果現在老大給你個任務,把一個檔案放到手機裡,你是不是慢慢吞吞地開啟cmd,敲入幾句自以為高大上的adb push here there,然後敲入回車,等收到那熟悉的回答2108 KB/s (669 bytes in 0.006s)後,頓時眉開眼笑。

android檔案管理開發中遇到的一些問題

1.難點主要有如何獲取外掛裝置的資訊以及路徑無論是U盤還是TF卡等等 獲取方式在其他部落格中請自己檢視。 2.在Android6.0中想要對外部裝置進行的檔案的操作是比較難的 因為6.0中Android系統對外部儲存器操作的許可權進行了修改,所以只能進行讀操作,無法進行對外

Android檔案管理安裝apk流程記錄

05-10 22:09:26.301 1402 1888 I ActivityManager: START u0 {act=android.intent.action.VIEW dat=file:///storage/emulated/0/下載/App/av

Android檔案管理

自己花了1個小時寫了個檔案管理器。寫之前以為是很難寫的,其實就是對File的操作嘛。。。所以我就寫了查,其他都沒寫,沒意義了。難度係數:0檔案管理器核心程式碼File[] files = file.listFiles()對,你沒有看錯,核心就只有一行程式碼。知道這一行程式碼就

開源 android 檔案管理

# File_Explorer # Android 檔案管理器 包常用ui控制元件有:         1.側滑選單slidingMenu            2.相容actionbar----actionbarsherlock         #專案結構:         com.yang.file_ex

Android自定義介面卡---實現簡單檔案管理

一、介面卡Adapter         現實生活中的介面卡就是一種“轉化器”,將兩個不相容的事物做一個連線。Android在檢視顯示和後臺資料上使用介面卡,顧名思義,就是把一些資料給變得適當,適合以便於在View上顯示。可以看作是介面資料繫結的一種理解。它所操縱的資料一般

HD檔案管理 v0.1.3----- 一款介面簡約,功能強大的免費檔案管理Android

Android平臺上具有完整功能的檔案管理,漂亮的UI介面設計以及良好的使用者體驗。 支援android 1.5及以上平臺 包括: * 將Linux平臺上最流行的圖示集之一 Faenza 作為檔案管理

Android 載入本地圖片(檔案管理中的圖片牆)

Android 載入本地圖片(檔案管理器中的圖片牆) --關於圖片牆的一些感悟與疑問,希望大家共同探討。 (By伊葉也) 圖片顯示及監聽 1、圖片顯示:基本上就5種顯示形式(如果同時嵌入5種形式,採用

Android呼叫系統自帶的檔案管理,開啟指定路徑

一、開啟系統自帶的檔案管理器 if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { showToast(R.string.msg_

android】簡易檔案管理(列表式檔案目錄)

、    核心程式碼:                                 File fatherFile = new File(path); File[] files = fatherFile.listFiles();         效果圖:        

Android遠端桌面助手(B1332)之檔案管理

sunrain_hjb的BLOG ARM.WinCE.Android.Robot.Linux.IoT.VR... Develop Helpful and Effective apps to make Jobs easier and lives Better!

Android進入本地檔案管理及不同檔案檢視

1、進入本地檔案(新增檔案): Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE

Java實現類似於檔案管理功能

package stream; import java.io.File; import java.util.Date; public class J_FileTest2 { public static void main(String[] args) { // T

18、android中呼叫系統自帶檔案管理並返回選中檔案的路徑

思路: 通過Android API呼叫系統自帶的檔案瀏覽器選取檔案獲得URI,然後將URI轉換成file,從而得到file。 import android.annotation.SuppressLint;import android.app.Activity;impo

Android 開啟檔案管理,並返回選中檔案的path

1: 點選觸發事件: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.add

Android 通過檔案管理選擇資料夾下面的檔案以及獲取路徑

      今天要求用手機檔案管理器選擇資料夾下面的資料夾,並且可以建立新的資料夾,當然最後發現實現不了。不過還是把如何選擇資料夾下面的檔案以及獲取到檔案路徑的方法記錄下來,以備以後使用: @Override protected void onCreate(Bund