首页 > 代码库 > Android技术4:Android4.4中如何更新相册信息

Android技术4:Android4.4中如何更新相册信息

      当你到这篇文章时,你肯定遇到了在Android4.4版本中需要使用本地相册时,无法找到最新的照片这一问题。在Android4.4以前在需要获取手机本地图片信息时,只需要发送一个广播更新相册信息,然而系统更新到4.4之后该广播无效且报错。

广播如下:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));    

该广播起到扫描媒体文件达到更新作用,然后4.4就收回这一权限。做Android开发,由于版本兼容性,开发的产品需要测试各种版本系统,测试成本较大。好了,下面介绍具体的方法。

1.获取系统相册数据方法

 1      Uri imageURI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;   2         ContentResolver mContentResolver = getApplicationContext().getContentResolver();   3         //只查询jpeg和png的图片   4         Cursor mCursor = mContentResolver.query(imageURI, null,MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?",   5                 new String[] { "image/jpeg", "image/png" }, MediaStore.Images.Media.DATE_TAKEN+" "+"desc");   6         while (mCursor.moveToNext()) { 7             //获取图片的路径   8             String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));  9             if(!new File(path).isFile())continue;10             Log.i("tag",path);11         }12         mCursor.close();

权限:

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />2 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>3 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

 

2.解决相册更新问题

在Android4.4版本中更新相册信息不支持文件夹,只支持单个文件更新。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));

虽然不能扫描文件夹,但是我们可以通过文件夹依次遍历的方法扫描文件。

 1 //单个文件广播 2 private void fileScan(String file){ 3         GroupActivity.this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file))); 4     } 5 //遍历文件夹 6 private void folderScan(String path){ 7         File file = new File(path); 8         if(file.exists() && file.isDirectory()){ 9             File[] array = file.listFiles();10             for(int i=0;i<array.length;i++){11                 File f = array[i];12                 if(f.isFile()){13                     String name = f.getName();14                     if(name.endsWith(".png") || name.endsWith(".jpg")){15                         fileScan(f.getAbsolutePath());16                     }17                 }18                 else {19                     folderScan(f.getAbsolutePath());20                 }21             }22         }23     }

一般照片信息保存的DCIM目录下,更新该目录即可

1   String file= Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM";2   folderScan(file);