阅读更多

此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能。

如图:

    Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等_第1张图片

代码:

 

public class GridViewFile extends Activity implements View.OnClickListener {private Context context;private TextView tv_title, textView;private GridView listView;private final String MUSIC_PATH = "/";// 记录当前路径下 的所有文件的数组File currentParent;// 记录当前路径下的所有文件的文件数组File[] currentFiles;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = this;initView();}public void initView() {findViewById(R.id.public_top_img_close).setOnClickListener(this);listView = (GridView) findViewById(R.id.gridview);textView = (TextView) findViewById(R.id.llss);onLoad();}public void onLoad() {ListSongsName();}private void ListSongsName() {// 获取系统的SD卡目录File root = new File(MUSIC_PATH);// 如果SD卡存在if (root.exists()) {currentParent = root;currentFiles = root.listFiles();// 获取root目录下的所有文件// 使用当前陆慕下的全部文件,文件夹来填充ListViewinflateListView(currentFiles);}// 为ListView的列表项的单击事件绑定监视器listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {// 用户点击了文件,则调用手机已安装软件操作该文件if (currentFiles[position].isFile()) {onError(currentFiles[position].getPath() + "1");Intent intent = OpenFile.openFile(currentFiles[position].getPath());startActivity(intent);} else {// 获取currentFiles[position]路径下的所有文件File[] tmp = currentFiles[position].listFiles();if (tmp == null || tmp.length == 0) {Toast.makeText(GridViewFile.this, "空文件夹!",Toast.LENGTH_SHORT).show();}// ifelse {// 获取用户单击的列表项对应的文件夹,设为当前的父文件夹currentParent = currentFiles[position];// 保存当前文件夹内的全部问价和文件夹currentFiles = tmp;inflateListView(currentFiles);}}}});}// 更新列表private void inflateListView(File[] files) {if (files.length == 0)Toast.makeText(GridViewFile.this, "sd卡不存在", Toast.LENGTH_SHORT).show();else {// 创建一个List集合,List集合的元素是MapList> listItems = new ArrayList>();for (int i = 0; i < files.length; i++) {Map listItem = new HashMap();// 如果当前File是文件夹,使用folder图标;否则使用file图标Log.i("path", files[i].getPath());Log.i("path", files[i].getName());if (files[i].isDirectory())listItem.put("icon", R.drawable.file_wenjianjia);// else if(files[i].isFi)elselistItem.put("icon", R.drawable.file_wenjian1);listItem.put("fileName", files[i].getName());// 添加List项listItems.add(listItem);}// 创建一个SimpleAdapterSimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,R.layout.acheshi_item, new String[] { "icon", "fileName" },new int[] { R.id.imageView1, R.id.text_path });// 位ListView设置AdpterlistView.setAdapter(simpleAdapter);try {textView.setText("当前路径为:" + currentParent.getCanonicalPath());} catch (IOException e) {e.printStackTrace();}}}@Overridepublic void onClick(View v) {onbey();}// 返回上层菜单private void onbey() {try {if (!MUSIC_PATH.equals(currentParent.getCanonicalPath())) {// 获取上一层目录currentParent = currentParent.getParentFile();// 列出当前目录下的所有文件currentFiles = currentParent.listFiles();// 再次更新ListViewinflateListView(currentFiles);} else {new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher).setTitle("提示").setMessage("确定要退出吗?").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {finish();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}}).create().show();}} catch (Exception e) {e.printStackTrace();}}public void onError(Object error) {Toast.makeText(getApplicationContext(), error + "", Toast.LENGTH_LONG).show();}protected void onDestroy() {super.onDestroy();}}

 

/** * 根据路径调用系统对应的应用打开文件 */public class OpenFile {    public static Intent openFile(String filePath){        File file = new File(filePath);        if(!file.exists()) return null;            /* 取得扩展名 */        String end=file.getName().substring(file.getName().lastIndexOf(".") + 1,file.getName().length()).toLowerCase();            /* 依扩展名的类型决定MimeType */        if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||                end.equals("xmf")||end.equals("ogg")||end.equals("wav")){            return getAudioFileIntent(filePath);        }else if(end.equals("3gp")||end.equals("mp4")){            return getAudioFileIntent(filePath);        }else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||                end.equals("jpeg")||end.equals("bmp")){            return getImageFileIntent(filePath);        }else if(end.equals("apk")){            return getApkFileIntent(filePath);        }else if(end.equals("ppt")){            return getPptFileIntent(filePath);        }else if(end.equals("xls")){            return getExcelFileIntent(filePath);        }else if(end.equals("doc")){            return getWordFileIntent(filePath);        }else if(end.equals("pdf")){            return getPdfFileIntent(filePath);        }else if(end.equals("chm")){            return getChmFileIntent(filePath);        }else if(end.equals("txt")){            return getTextFileIntent(filePath,false);        }else{            return getAllIntent(filePath);        }    }    //Android获取一个用于打开APK文件的intent    public static Intent getAllIntent( String param ) {        Intent intent = new Intent();        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.setAction(android.content.Intent.ACTION_VIEW);//动作        Uri uri = Uri.fromFile(new File(param ));//转换类型        intent.setDataAndType(uri,"*/*");        return intent;    }    //Android获取一个用于打开APK文件的intent    public static Intent getApkFileIntent( String param ) {        Intent intent = new Intent();        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.setAction(android.content.Intent.ACTION_VIEW);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri,"application/vnd.android.package-archive");        return intent;    }    //Android获取一个用于打开VIDEO文件的intent    public static Intent getVideoFileIntent( String param ) {        Intent intent = new Intent("android.intent.action.VIEW");        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        intent.putExtra("oneshot", 0);        intent.putExtra("configchange", 0);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "video/*");        return intent;    }    //Android获取一个用于打开AUDIO文件的intent    public static Intent getAudioFileIntent( String param ){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        intent.putExtra("oneshot", 0);        intent.putExtra("configchange", 0);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "audio/*");        return intent;    }    //Android获取一个用于打开Html文件的intent    public static Intent getHtmlFileIntent( String param ){        Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build();        Intent intent = new Intent("android.intent.action.VIEW");        intent.setDataAndType(uri, "text/html");        return intent;    }    //Android获取一个用于打开图片文件的intent    public static Intent getImageFileIntent( String param ) {        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "image/*");        return intent;    }    //Android获取一个用于打开PPT文件的intent    public static Intent getPptFileIntent( String param ){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "application/vnd.ms-powerpoint");        return intent;    }    //Android获取一个用于打开Excel文件的intent    public static Intent getExcelFileIntent( String param ){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "application/vnd.ms-excel");        return intent;    }    //Android获取一个用于打开Word文件的intent    public static Intent getWordFileIntent( String param ){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "application/msword");        return intent;    }    //Android获取一个用于打开CHM文件的intent    public static Intent getChmFileIntent( String param ){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "application/x-chm");        return intent;    }    //Android获取一个用于打开文本文件的intent    public static Intent getTextFileIntent( String param, boolean paramBoolean){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        if (paramBoolean){            Uri uri1 = Uri.parse(param );            intent.setDataAndType(uri1, "text/plain");        }else{            Uri uri2 = Uri.fromFile(new File(param ));            intent.setDataAndType(uri2, "text/plain");        }        return intent;    }    //Android获取一个用于打开PDF文件的intent    public static Intent getPdfFileIntent( String param ){        Intent intent = new Intent("android.intent.action.VIEW");        intent.addCategory("android.intent.category.DEFAULT");        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        Uri uri = Uri.fromFile(new File(param ));        intent.setDataAndType(uri, "application/pdf");        return intent;    }}

 

不要忘记在AndroidManifest.xml加权限哦!

         

 

源码点击下载

 

 

更多相关文章

  1. 我的android 第9天 - 文件存储
  2. Android之怎么操作文件(读写以及保存到sdcard)
  3. Android中strings.xml文件
  4. Android Studio导入.so库文件方法
  5. Android显示PDF文件之iText
  6. Android中解析doc、docx、xls、xlsx格式文件
  7. Android中除了利用VideoView、Mediaplayer播放视频文件外,还可以
  8. Android 布局文件属性讲解
  9. (Android)JavaSocket编程,文件上传到服务器,客户端Android,服务器端J2

随机推荐

  1. Android数据存储之三SQLite嵌入式数据库(
  2. android Service相关知识点
  3. 11.Android数据库SQLiteDatabase的使用
  4. Android(安卓)SDK Tools 命令行攻略
  5. 一只不务正业的程序猿玩出个Processing交
  6. js判断移动端是否安装某款app的多种方法
  7. Android(安卓)SDK安装无法识别jdk(JAVA_H
  8. Android(安卓)Studio Mac常用快捷键
  9. Android(安卓)ApiDemos示例解析(128):Vie
  10. Android(安卓)ViewRootImpl 解析