利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹...

  1.     /** 
  2.      * 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹 
  3.      */  
  4.     private void getImages()  
  5.     {  
  6.         if (!Environment.getExternalStorageState().equals(  
  7.                 Environment.MEDIA_MOUNTED))  
  8.         {  
  9.             Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show();  
  10.             return;  
  11.         }  
  12.         // 显示进度条  
  13.         mProgressDialog = ProgressDialog.show(this, null, "正在加载...");  
  14.   
  15.         new Thread(new Runnable()  
  16.         {  
  17.             @Override  
  18.             public void run()  
  19.             {  
  20.   
  21.                 String firstImage = null;  
  22.   
  23.                 Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;  
  24.                 ContentResolver mContentResolver = MainActivity.this  
  25.                         .getContentResolver();  
  26.   
  27.                 // 只查询jpeg和png的图片  
  28.                 Cursor mCursor = mContentResolver.query(mImageUri, null,  
  29.                         MediaStore.Images.Media.MIME_TYPE + "=? or "  
  30.                                 + MediaStore.Images.Media.MIME_TYPE + "=?",  
  31.                         new String[] { "image/jpeg", "image/png" },  
  32.                         MediaStore.Images.Media.DATE_MODIFIED);  
  33.   
  34.                 Log.e("TAG", mCursor.getCount() + "");  
  35.                 while (mCursor.moveToNext())  
  36.                 {  
  37.                     // 获取图片的路径  
  38.                     String path = mCursor.getString(mCursor  
  39.                             .getColumnIndex(MediaStore.Images.Media.DATA));  
  40.   
  41.                     Log.e("TAG", path);  
  42.                     // 拿到第一张图片的路径  
  43.                     if (firstImage == null)  
  44.                         firstImage = path;  
  45.                     // 获取该图片的父路径名  
  46.                     File parentFile = new File(path).getParentFile();  
  47.                     if (parentFile == null)  
  48.                         continue;  
  49.                     String dirPath = parentFile.getAbsolutePath();  
  50.                     ImageFloder imageFloder = null;  
  51.                     // 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~)  
  52.                     if (mDirPaths.contains(dirPath))  
  53.                     {  
  54.                         continue;  
  55.                     } else  
  56.                     {  
  57.                         mDirPaths.add(dirPath);  
  58.                         // 初始化imageFloder  
  59.                         imageFloder = new ImageFloder();  
  60.                         imageFloder.setDir(dirPath);  
  61.                         imageFloder.setFirstImagePath(path);  
  62.                     }  
  63.   
  64.                     int picSize = parentFile.list(new FilenameFilter()  
  65.                     {  
  66.                         @Override  
  67.                         public boolean accept(File dir, String filename)  
  68.                         {  
  69.                             if (filename.endsWith(".jpg")  
  70.                                     || filename.endsWith(".png")  
  71.                                     || filename.endsWith(".jpeg"))  
  72.                                 return true;  
  73.                             return false;  
  74.                         }  
  75.                     }).length;  
  76.                     totalCount += picSize;  
  77.   
  78.                     imageFloder.setCount(picSize);  
  79.                     mImageFloders.add(imageFloder);  
  80.   
  81.                     if (picSize > mPicsSize)  
  82.                     {  
  83.                         mPicsSize = picSize;  
  84.                         mImgDir = parentFile;  
  85.                     }  
  86.                 }  
  87.                 mCursor.close();  
  88.   
  89.                 // 扫描完成,辅助的HashSet也就可以释放内存了  
  90.                 mDirPaths = null;  
  91.   
  92.                 // 通知Handler扫描图片完成  
  93.                 mHandler.sendEmptyMessage(0x110);  
  94.   
  95.             }  
  96.         }).start();  
  97.   
  98.     }  

 

ps:运行出现空指针的话,在81行的位置添加判断,if(parentFile.list()==null)continue , 切记~~~有些图片比较诡异~~; 

转载于:https://www.cnblogs.com/antble/p/8514853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值