当我想做一个相册的时候,我需要的获得SD卡下所有图片的路径path,然后利用Bitmap的方法画到到画布canvas上。 我该如何获得SD卡下的图片路径呢?
其实在没有做好研究的之前我走了好多弯路,并且还是一个错误的弯路。 首先我先获得SD卡下的根目录路径: privateString isSdcard(){ File sdcardDir=null; boolean
isSDExist=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); if(isSDExist){
//如果存在SDcard就找到跟目录
sdcardDir=Environment.getExternalStorageDirectory();return sdcardDir.toString(); }else { return null; } } }
找到/sdcard之后,就开始利用File[] f = file.listFile();的方法获得目录下的所有文件的列表。 public void getpicpath(String sdpath){ //打开SD卡目录
File file = new File(sdpath); //获取SD卡目录列表 File[] files =file.listFiles(); for(int z=0;z public void isfile(File file){ Log.i(TAG, \"isfile\"); String fnm=file.getPath(); Log.i(TAG, \"isfile==\"+fnm); mapsd=new HashMap String suffix =filename.substring(idx+1, filename.length()); if (suffix.toLowerCase().equals(\"jpg\") || suffix.toLowerCase().equals(\"jpeg\") || suffix.toLowerCase().equals(\"bmp\") || suffix.toLowerCase().equals(\"png\") || suffix.toLowerCase().equals(\".gif\") ){ mapsd.put(\"imagepath\",file.getPath().toString()); listsd.add(mapsd); } } 如果是有文件isfile 就配合他文件名的后缀名是否为图片,是的话放进mapsd中,再加到list中。 如果有文件是文件夹的话,就继续用file.listFile()打开它的文件夹里面的内容,再用for语句判断它里面的文件是否有文件,如果有就isfile();无,就利用getpicpath()打开它。 public void notfile(File file){ Log.i(TAG, \"notfile Yes\"); Log.i(TAG, \"notfilepath\"+file.getPath()); File[] files = file.listFiles(); if(files ==null){ return; } for(int i = 0;i }else{ String SDpath=fis.getPath(); File fileSD=new File(SDpath); Log.i(TAG,\"notfile =\"+fileSD); File[] filess=fileSD.listFiles(); if(filess ==null){ return; } for(int j=0;j list = new ArrayList String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID, Thumbnails.DATA }; Cursor cursor = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null,null); if(cur.moveToFirst()) { int _id; int image_id; String image_path; int _idColumn = cur.getColumnIndex(Thumbnails._ID); int image_idColumn =cur.getColumnIndex(Thumbnails.IMAGE_ID); int dataColumn = cur.getColumnIndex(Thumbnails.DATA); Log.i(TAG, String.valueOf(image_idColumn)) ; do { // Get the field values _id = cur.getInt(_idColumn); image_id =cur.getInt(image_idColumn); image_path =cur.getString(dataColumn); // Do something with the values. // Log.i(TAG, _id + \" image_id:\"+ image_id + \" path:\" // + image_path +\"---\"); HashMap while (cur.moveToNext()); } 上述方法获得含有image_path和id的list 这里的image_path其实是缩略图的路径,要找到原图片的路径要利用image_id和原路径相关联的关系寻找,如下: 我是用SimpleAdapter显示图片的,所以点击的时候会得到一个position的位置int ,再找到image_id; public void onItemClick(AdapterView> arg0, Viewarg1, int position, long arg3) { cr = getContentResolver(); String image_id = list.get(position).get(\"image_id\"); String[] projection = { Media._ID, Media.DATA }; Cursor cursor = cr.query(Media.EXTERNAL_CONTENT_URI, projection, Media._ID +\"=\" + image_id, null,null); if (cursor !=null) { cursor.moveToFirst(); Stringpath = cursor.getString(cursor.getColumnIndex(Media.DATA)); Log.i(TAG,path); }else { Toast.makeText(this,\"Image doesn't exist!\", Toast.LENGTH_SHORT) .show(); } } 因篇幅问题不能全部显示,请点此查看更多更全内容