• 利用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 , 切记~~~有些图片比较诡异~~; 

  • 相关阅读:
    数据结构与算法——认识O(NlogN)的排序(2)
    数据结构与算法——简单排序算法(2)
    数据结构与算法——认识O(NlogN)的排序(1)
    论文翻译——Attention Is All You Need
    论文翻译——Character-level Convolutional Networks for Text Classification
    研究NLP100篇必读的论文---已整理可直接下载
    kaggle——绝地求生游戏最终排名预测
    tab栏切换
    css兄弟选择器(+ 和 ~)的使用和区别
    cookie和web storage的区别
  • 原文地址:https://www.cnblogs.com/antble/p/8514853.html
Copyright © 2020-2023  润新知