【Android源码 栏目提醒】:网学会员Android源码 为您提供android文件管理器的源码实现 - 企业软件开发参考,解决您在android文件管理器的源码实现 - 企业软件开发学习中工作中的难题,参考学习。
1.
android文件管理器介绍
android系统并不自带文件管理器但是很多情况下我们有诸如从SD中打开文件的需要就必须借助三方开发的资源管理器常用的有AndExplorer等。
这种情况下发布后用户还需要安装依赖的软件非常麻烦。
下面介绍在代码中实现资源管理器只需要一百行左右的一个类即可以最常用的文件选择功能。
2. 相关知识文件管理器一般以固定大小的对话框的方式出现使用ListView作为文件目录的显示载体。
点选目录测进入点选文件则将所选择文件的Uri返回给调用它的Activity。
ListView的使用是实现这个功能的重点。
3. 例程1 功能当用户点击按钮时调出固定大小的文件管理器默认显示的目录是SD卡的根目录。
用户选择文件后在界面上显示该文件的路径。
2 可从此处下载可独立运行的代码http://download.csdn.net/detail/jrcisme/41638623 核心代码及说明a 调用资源管理器Intent intent new Intentintent.putExtraexplorer_titlegetStringR.string.dialog_read_from_dir // 设置文件管理器标题intent.setDataAndTypeUri.fromFilenew File/sdcard / // 设置起始文件夹和文件类型intent.setClassMyActivity.this ExDialog.classstartActivityForResultintent REQUEST_EXb 从资源管理器接收数据protected void onActivityResultint requestCode int resultCodeIntent intent String pathif resultCode RESULT_OK if requestCode REQUEST_EX Uri uri intent.getData // 接收用户所选文件的路径TextView text TextView findViewByIdR.id.texttext.setTextselect: uri // 在界面上显示路径c 文件管理器类的实现public class ExDialog extends ListActivity // ListActivity自带List控件private List mDataprivate String mDir /sdcardOverrideprotected void onCreateBundle savedInstanceState super.onCreatesavedInstanceStateIntent intent this.getIntentBundle bl intent.getExtrasString title bl.getStringexplorer_title // 接收标题内容Uri uri intent.getData // 接收起始目录mDir uri.getPath // 设置起始目录setTitletitlemData getData // 向链表mData填充目录的数据MyAdapter adapter new MyAdapterthissetListAdapteradapter // 设置MyAdapter类为ListView控件提供数据WindowManager m getWindowManagerDisplay d m.getDefaultDisplayLayoutParams p getWindow.getAttributesp.height int d.getHeight 0.8p.width int d.getWidth 0.95getWindow.setAttributesp // 设置对话框为固定大小不因进出目录变化private List getData // 将目录数据填充到链表中List list new ArrayListMap map nullFile f new FilemDir // 打开当前目录File files f.listFiles // 获取当前目录中文件列表if mDir.equals/sdcard // 不充许进入/sdcard上层目录map new HashMap // 加返回上层目录项map.puttitle Back to ../map.putinfo f.getParentmap.putimg R.drawable.ex_folderlist.addmapif files null // 将目录中文件填加到列表中for int i 0 i files.length i map new HashMapmap.puttitle filesi.getNamemap.putinfo filesi.getPathif filesi.isDirectory // 按不同类型显示不同图标map.putimg R.drawable.ex_folderelsemap.putimg R.drawable.ex_doclist.addmapreturn list// 响应用户点击列表项的事件Overrideprotected void onListItemClickListView l View v int position long id Log.dMyListView4-click String mData.getposition.getinfoif Integer mData.getposition.getimg R.drawable.ex_folder mDir String mData.getposition.getinfo mData getData //点击目录时进入子目录MyAdapter adapter new MyAdapterthissetListAdapteradapter else // 点击文件时关闭文件管理器并将选取结果返回finishWithResultString mData.getposition.getinfopublic final class ViewHolder // 定义每个列表项所含内容public ImageView img // 显示图片IDpublic TextView title // 文件目录名public TextView info // 文件目录描述public class MyAdapter extends BaseAdapter // 实现列表内容适配器private LayoutInflater mInflaterpublic MyAdapterContext context this.mInflater LayoutInflater.fromcontextpublic int getCount // 获取列表项个数return mData.sizepublic Object getItemint arg0 return nullpublic long getItemIdint arg0 return 0// 设置每个列表项的显示public View getViewint position View convertView ViewGroup parent ViewHolder holder nullif convertView null holder new ViewHolderconvertView mInflater.inflateR.layout.listview null // 设置列表项的布局holder.img ImageView convertView.findViewByIdR.id.imgholder.title TextView convertView.findViewByIdR.id.titleholder.info TextView convertView.findViewByIdR.id.infoconvertView.setTagholder else holder ViewHolder convertView.getTagholder.img.setBackgroundResourceInteger Data.getposition.getimg // 根据位置position设置具体内容holder.title.setTextString Data.getposition.gettitleholder.info.setTextString mData.getposition.getinforeturn convertViewprivate void finishWithResultString path Bundle conData new BundleconData.putStringresults Thanks ThanksIntent intent new Intent // 以intent的方式将结果返回调用类intent.putExtrasconDataUri startDir Uri.fromFilenew Filepathintent.setDataAndTypestartDirvnd.
android.cursor.dir/lysesoft.andexplorer.filesetResultRESULT_OK intentfinish