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);
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。