一起学习Android开发_1_已下载文件的管理demo

来源:互联网 发布:深入浅出java中文版 编辑:程序博客网 时间:2024/05/16 10:21

先看看效果图

直接上代码吧:

[java] view plain copy
  1. package com.example.managedownfile;  
  2.   
  3.   
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileNotFoundException;  
  7. import java.io.IOException;  
  8. import java.util.ArrayList;  
  9. import java.util.HashMap;  
  10. import java.util.List;  
  11. import java.util.Map;  
  12.   
  13.   
  14. import android.net.Uri;  
  15. import android.os.Bundle;  
  16. import android.os.Environment;  
  17. import android.app.Activity;  
  18. import android.content.Context;  
  19. import android.content.Intent;  
  20. import android.content.pm.ApplicationInfo;  
  21. import android.content.pm.PackageInfo;  
  22. import android.content.pm.PackageManager;  
  23. import android.graphics.drawable.Drawable;  
  24. import android.util.Log;  
  25. import android.view.Menu;  
  26. import android.view.View;  
  27. import android.view.View.OnClickListener;  
  28. import android.widget.AdapterView;  
  29. import android.widget.AdapterView.OnItemClickListener;  
  30. import android.widget.ArrayAdapter;  
  31. import android.widget.ImageView;  
  32. import android.widget.ListView;  
  33. import android.widget.SimpleAdapter;  
  34. import android.widget.SimpleAdapter.ViewBinder;  
  35. import android.widget.TextView;  
  36.   
  37.   
  38. public class ManageDownFile extends Activity {  
  39. private static String rootPath = "/xxxxx";  
  40. ListView lv;  
  41. private List<String> items = null;//存放名称    
  42.      private List<String> paths = null;//存放路径    
  43.      ListItem listitem;  
  44. @Override  
  45. protected void onCreate(Bundle savedInstanceState) {  
  46. super.onCreate(savedInstanceState);  
  47. setContentView(R.layout.managedownfile);  
  48. rootPath = Environment.getExternalStorageDirectory().getAbsolutePath()+rootPath;  
  49. lv = (ListView) findViewById(R.id.downfilemanagerlist);  
  50. getFileDir(rootPath) ;  
  51. }  
  52. class ListItem  
  53. {  
  54. List<Map<String ,Object>> listitems;  
  55. int count;  
  56. public ListItem() {  
  57. count = 0;  
  58. listitems = new ArrayList<Map<String,Object>>();  
  59. }  
  60. }  
  61. public static Drawable getApkIcon(Context context, String apkPath) {  
  62.        PackageManager pm = context.getPackageManager();  
  63.        PackageInfo info = pm.getPackageArchiveInfo(apkPath,PackageManager.GET_ACTIVITIES);  
  64.        if (info != null) {  
  65.            ApplicationInfo appInfo = info.applicationInfo;  
  66.            appInfo.sourceDir = apkPath;  
  67.            appInfo.publicSourceDir = apkPath;  
  68.            try {  
  69.              Log.i("sss""sddddddddd");  
  70.                return appInfo.loadIcon(pm);  
  71.            } catch (OutOfMemoryError e) {  
  72.                Log.e("ApkIconLoader", e.toString());  
  73.            }  
  74.        }  
  75.        return null;  
  76.    }  
  77. String getFileSize(File f)  
  78. {  
  79. String size = "未知大小";  
  80. int filelen = 0;  
  81. FileInputStream fis = null;  
  82. try {  
  83. fis = new FileInputStream(f);  
  84. catch (FileNotFoundException e) {  
  85. e.printStackTrace();  
  86. }   
  87. try {  
  88. filelen = fis.available();  
  89. catch (IOException e) {  
  90. // TODO Auto-generated catch block  
  91. e.printStackTrace();  
  92. }   
  93. int fl  = 0;  
  94. if(filelen>0)  
  95. {  
  96. if(filelen>1024)  
  97. {//k  
  98. fl = filelen/1024;  
  99. if(filelen>1024*1024)  
  100. {//M  
  101. fl = (int) ((filelen/1024.0)/1024.0);  
  102. size = fl +"";//整数位  
  103. fl = (int) (((filelen/1024.0)*1000)/1024.0-fl*1000);//小数前三位  
  104. if(fl%10>4)  
  105. fl = fl/10+1;  
  106. else  
  107. fl = fl/10;  
  108. size = size+"."+fl+"MB";  
  109. }  
  110. else  
  111. {  
  112. size = fl +"";//整数位  
  113. fl = (filelen*100)/1024-fl*100;//小数前两位  
  114. size = size+"."+fl+"KB";  
  115. }  
  116. }  
  117. else  
  118. size = filelen +"B";  
  119. }  
  120. return size;  
  121. }  
  122. public void getFileDir(String filePath) {    
  123.         try{    
  124.             File f = new File(filePath);    
  125.             if(!f.exists())  
  126.             f.mkdirs();  
  127.               
  128.             File[] files = f.listFiles();// 列出所有文件    
  129.             if(files != null)  
  130.             {  
  131.             listitem = new ListItem();  
  132.             listitem.count = files.length;// 文件个数    
  133.             for (int i = 0; i < listitem.count; i++)   
  134.             {    
  135.             Map<String ,Object> item = new HashMap<String, Object>();  
  136.             item.put("icon", getApkIcon(this,files[i].getPath()));  
  137.             item.put("filename", files[i].getName());  
  138.             item.put("filesize", getFileSize(files[i]));  
  139.             item.put("filepath", files[i].getPath());  
  140.             listitem.listitems.add(item);    
  141.                  }    
  142.             }  
  143.             SimpleAdapter sadapter = new SimpleAdapter(this, listitem.listitems, R.layout.fordownfilemanage,  
  144.             new String[]{"icon","filename","filesize","filepath"}, new int[] {R.id.fileicon,R.id.filename,R.id.filesize,R.id.filepath});  
  145.             lv.setAdapter(sadapter);    
  146.             sadapter.setViewBinder(new ViewBinder(){  
  147.                          public boolean setViewValue(View view,Object data,String textRepresentation){  
  148.                             if(view instanceof ImageView && data instanceof Drawable){  
  149.                                 ImageView iv=(ImageView)view;  
  150.                                 iv.setImageDrawable((Drawable)data);  
  151.                                 return true;  
  152.                             }  
  153.                             else return false;  
  154.                         }  
  155.                     });  
  156.         }catch(Exception ex){    
  157.         Log.i("ss",ex.toString());  
  158.         }    
  159.         lv.setOnItemClickListener(new OnItemClickListener() {  
  160. @Override  
  161. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {  
  162. // TODO Auto-generated method stub  
  163. Log.i("aaaaaaaa"""+((TextView)arg1.findViewById(R.id.filename)).getText());  
  164. openfile(((TextView)arg1.findViewById(R.id.filepath)).getText().toString());  
  165. }  
  166. });  
  167.     }    
  168. void openfile(String filePath)  
  169. {  
  170. /* 取得扩展名 */    
  171.         String end=filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase();  
  172.         Intent intent;  
  173.    
  174.         /* 依扩展名的类型决定MimeType */    
  175.         if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||    
  176.                 end.equals("xmf")||end.equals("ogg")||end.equals("wav")){    
  177.         intent = getAudioFileIntent(filePath);    
  178.         }else if(end.equals("3gp")||end.equals("mp4")){    
  179.         intent = getAudioFileIntent(filePath);    
  180.         }else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||    
  181.                 end.equals("jpeg")||end.equals("bmp")){    
  182.         intent = getImageFileIntent(filePath);    
  183.         }else if(end.equals("apk")){    
  184.         intent = getApkFileIntent(filePath);    
  185.         }else if(end.equals("ppt")){    
  186.         intent = getPptFileIntent(filePath);    
  187.         }else if(end.equals("xls")){    
  188.         intent = getExcelFileIntent(filePath);    
  189.         }else if(end.equals("doc")){    
  190.         intent = getWordFileIntent(filePath);    
  191.         }else if(end.equals("pdf")){    
  192.         intent = getPdfFileIntent(filePath);    
  193.         }else if(end.equals("chm")){    
  194.         intent = getChmFileIntent(filePath);    
  195.         }else if(end.equals("txt")){    
  196.         intent =  getTextFileIntent(filePath,false);    
  197.         }else{    
  198.         intent = getAllIntent(filePath);    
  199.         }    
  200.         startActivity(intent);  
  201. }  
  202.     
  203.   //Android获取一个用于打开APK文件的intent    
  204.     public static Intent getAllIntent( String param ) {    
  205.     
  206.         Intent intent = new Intent();      
  207.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      
  208.         intent.setAction(android.content.Intent.ACTION_VIEW);      
  209.         Uri uri = Uri.fromFile(new File(param ));    
  210.         intent.setDataAndType(uri,"*/*");     
  211.         return intent;    
  212.     }    
  213.     //Android获取一个用于打开APK文件的intent    
  214.     public static Intent getApkFileIntent( String param ) {    
  215.     
  216.         Intent intent = new Intent();      
  217.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      
  218.         intent.setAction(android.content.Intent.ACTION_VIEW);      
  219.         Uri uri = Uri.fromFile(new File(param ));    
  220.         intent.setDataAndType(uri,"application/vnd.android.package-archive");     
  221.         return intent;    
  222.     }    
  223.     
  224.     //Android获取一个用于打开VIDEO文件的intent    
  225.     public static Intent getVideoFileIntent( String param ) {    
  226.     
  227.         Intent intent = new Intent("android.intent.action.VIEW");    
  228.         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);    
  229.         intent.putExtra("oneshot"0);    
  230.         intent.putExtra("configchange"0);    
  231.         Uri uri = Uri.fromFile(new File(param ));    
  232.         intent.setDataAndType(uri, "video/*");    
  233.         return intent;    
  234.     }    
  235.     
  236.     //Android获取一个用于打开AUDIO文件的intent    
  237.     public static Intent getAudioFileIntent( String param ){    
  238.     
  239.         Intent intent = new Intent("android.intent.action.VIEW");    
  240.         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);    
  241.         intent.putExtra("oneshot"0);    
  242.         intent.putExtra("configchange"0);    
  243.         Uri uri = Uri.fromFile(new File(param ));    
  244.         intent.setDataAndType(uri, "audio/*");    
  245.         return intent;    
  246.     }    
  247.     
  248.     //Android获取一个用于打开Html文件的intent       
  249.     public static Intent getHtmlFileIntent( String param ){    
  250.     
  251.         Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build();    
  252.         Intent intent = new Intent("android.intent.action.VIEW");    
  253.         intent.setDataAndType(uri, "text/html");    
  254.         return intent;    
  255.     }    
  256.     
  257.     //Android获取一个用于打开图片文件的intent    
  258.     public static Intent getImageFileIntent( String param ) {    
  259.     
  260.         Intent intent = new Intent("android.intent.action.VIEW");    
  261.         intent.addCategory("android.intent.category.DEFAULT");    
  262.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
  263.         Uri uri = Uri.fromFile(new File(param ));    
  264.         intent.setDataAndType(uri, "image/*");    
  265.         return intent;    
  266.     }    
  267.     
  268.     //Android获取一个用于打开PPT文件的intent       
  269.     public static Intent getPptFileIntent( String param ){      
  270.     
  271.         Intent intent = new Intent("android.intent.action.VIEW");       
  272.         intent.addCategory("android.intent.category.DEFAULT");       
  273.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       
  274.         Uri uri = Uri.fromFile(new File(param ));       
  275.         intent.setDataAndType(uri, "application/vnd.ms-powerpoint");       
  276.         return intent;       
  277.     }       
  278.     
  279.     //Android获取一个用于打开Excel文件的intent       
  280.     public static Intent getExcelFileIntent( String param ){      
  281.     
  282.         Intent intent = new Intent("android.intent.action.VIEW");       
  283.         intent.addCategory("android.intent.category.DEFAULT");       
  284.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       
  285.         Uri uri = Uri.fromFile(new File(param ));       
  286.         intent.setDataAndType(uri, "application/vnd.ms-excel");       
  287.         return intent;       
  288.     }       
  289.     
  290.     //Android获取一个用于打开Word文件的intent       
  291.     public static Intent getWordFileIntent( String param ){      
  292.     
  293.         Intent intent = new Intent("android.intent.action.VIEW");       
  294.         intent.addCategory("android.intent.category.DEFAULT");       
  295.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       
  296.         Uri uri = Uri.fromFile(new File(param ));       
  297.         intent.setDataAndType(uri, "application/msword");       
  298.         return intent;       
  299.     }       
  300.     
  301.     //Android获取一个用于打开CHM文件的intent       
  302.     public static Intent getChmFileIntent( String param ){       
  303.     
  304.         Intent intent = new Intent("android.intent.action.VIEW");       
  305.         intent.addCategory("android.intent.category.DEFAULT");       
  306.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       
  307.         Uri uri = Uri.fromFile(new File(param ));       
  308.         intent.setDataAndType(uri, "application/x-chm");       
  309.         return intent;       
  310.     }       
  311.     
  312.     //Android获取一个用于打开文本文件的intent       
  313.     public static Intent getTextFileIntent( String param, boolean paramBoolean){       
  314.     
  315.         Intent intent = new Intent("android.intent.action.VIEW");       
  316.         intent.addCategory("android.intent.category.DEFAULT");       
  317.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       
  318.         if (paramBoolean){       
  319.             Uri uri1 = Uri.parse(param );       
  320.             intent.setDataAndType(uri1, "text/plain");       
  321.         }else{       
  322.             Uri uri2 = Uri.fromFile(new File(param ));       
  323.             intent.setDataAndType(uri2, "text/plain");       
  324.         }       
  325.         return intent;       
  326.     }      
  327.     //Android获取一个用于打开PDF文件的intent       
  328.     public static Intent getPdfFileIntent( String param ){       
  329.     
  330.         Intent intent = new Intent("android.intent.action.VIEW");       
  331.         intent.addCategory("android.intent.category.DEFAULT");       
  332.         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       
  333.         Uri uri = Uri.fromFile(new File(param ));       
  334.         intent.setDataAndType(uri, "application/pdf");       
  335.         return intent;       
  336.     }    
  337. }  
  338.   
  339. <?xml version="1.0" encoding="utf-8"?>  
  340. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  341.     android:layout_width="match_parent"  
  342.     android:layout_height="50dp"  
  343.     android:orientation="horizontal" >  
  344.     <ImageView   
  345.         android:id="@+id/fileicon"  
  346.         android:layout_margin="5dp"  
  347.         android:layout_height="match_parent"  
  348.         android:layout_width="match_parent"  
  349.         android:layout_weight="4"  
  350.         android:src="@drawable/ic_launcher"/>  
  351.     <LinearLayout   
  352.         android:layout_height="match_parent"  
  353.         android:layout_width="match_parent"  
  354.         android:layout_weight="1"  
  355.         android:orientation="vertical"  
  356.         >  
  357.         <TextView   
  358.             android:id="@+id/filename"  
  359.             android:layout_height="match_parent"  
  360.         android:layout_width="match_parent"  
  361.         android:layout_weight="1"  
  362.         android:text="文件名"  
  363.             />  
  364.          <TextView   
  365.               android:id="@+id/filesize"  
  366.             android:layout_height="match_parent"  
  367.         android:layout_width="match_parent"  
  368.         android:layout_weight="1"  
  369.          android:text="文件大小"  
  370.             />  
  371.          <TextView   
  372.               android:id="@+id/filepath"  
  373.             android:layout_height="match_parent"  
  374.         android:layout_width="match_parent"  
  375.          android:text="文件大小"  
  376.          android:visibility="gone"  
  377.             />  
  378.     </LinearLayout>  
  379.   
  380.   
  381. </LinearLayout>  
  382.   
  383.   
  384. <?xml version="1.0" encoding="utf-8"?>  
  385.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  386.      android:orientation="vertical" android:layout_width="fill_parent"    
  387.      android:layout_height="fill_parent">    
  388.      <ListView android:id="@+id/downfilemanagerlist"    
  389.          android:layout_width="fill_parent"    
  390.          android:layout_height="match_parent">    
  391.      </ListView>    
  392.  </LinearLayout>  

参考了以下博文

http://blog.csdn.net/weich_java/article/details/7002829 ,还有一些其他资料,也表示感谢

还有,推荐一个资源,别人写的,我下载看了,还没来得及仔细研究,但是感觉很强大,

这是下载链接http://download.csdn.net/detail/kangkangxuxu/3434346

另外推荐看郭霖的博客 http://blog.csdn.net/sinyu890807/

0 0
原创粉丝点击