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);

 

你可能感兴趣的:(android)