Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android4.4 ContentResolver查詢圖片無效 及 圖庫刪除 增加圖片後,ContentResolver不更新的問題解決

Android4.4 ContentResolver查詢圖片無效 及 圖庫刪除 增加圖片後,ContentResolver不更新的問題解決

編輯:關於Android編程

問題背景:

參考鏈接 做了一個圖片浏覽,用ContentResolver掃描圖庫照片,且嚴格按照時間拍攝順序排好序顯示在listview裡。如下圖所示:

\

遇到的問題是在4.2的手機上能正常顯示,但是新增了照片,這個掃描依舊麼變化。實在是惱火。另一個嚴重的問題是,在4.4的手機上,一張圖片都跑不起來。大爺的,真是坑爹到家了。浪費我好幾個小時,後來幾乎要放棄了,無意中浏覽自己以前寫的博客,才發現真正的原因是少了一個權限。



需要有以下兩個權限,才能在發廣播更新時起到作用。尤其是第二個權限,沒這個權限在4.2的手機上可以浏覽但不會更新,在4.4完全掃描不到圖片。但奇怪的是二種情況下都不會報異常。

查詢的關鍵語句是:

				Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
				Log.i("yanguoqi", "mImageUri = " + mImageUri.getPath());
				ContentResolver mContentResolver = MainActivity.this.getContentResolver();

				//只查詢jpeg的圖片
				Cursor mCursor = mContentResolver.query(mImageUri, null,
						MediaStore.Images.Media.MIME_TYPE + "=?",
						new String[] { "image/jpeg"}, MediaStore.Images.Media.DATE_TAKEN);

				mCursor.moveToLast();
				int num = mCursor.getCount();
				
				 do{
					//獲取圖片的路徑
					String path = mCursor.getString(mCursor
							.getColumnIndex(MediaStore.Images.Media.DATA));
					if(path.contains("/DCIM/Camera")){
						imgPaths.add(path);
					}
				}while (mCursor.moveToPrevious());

				mCursor.close();

1、查詢時mContentResolver.query(mImageUri。。。)這個uri只能填寫Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;構造出來的URI。而不能隨便寫個路徑構造個URI,這塊著實詭異;

2、所以為了過濾,只能掃描後通過if(path.contains("/DCIM/Camera"))這句話來過濾圖庫下面的文件;

3.為了實現嚴格按照拍照時間排序,光在查詢裡寫MediaStore.Images.Media.DATE_TAKEN還不中,這麼寫查出來的cursor第一個確實是最新的,但是通過List.add操作,反而把第一個排到最後了。因此我先將cursor移動最後,之所以do在前面while在後,是為了不漏掉第一個圖片。

4、每次查詢前,應該發廣播更新下:

	private void updateGallery(){
		Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);   //, MediaStore.Images.Media.EXTERNAL_CONTENT_URI
		String path = Environment.getExternalStorageDirectory() + "/DCIM/Camera"; 
		Uri uri = Uri.fromFile(new File(path));   
		intent.setData(uri);   
		this.sendBroadcast(intent);  
	}

在發廣播處,可以指定path路徑的uri,當然也可以傳
 MediaStore.Images.Media.EXTERNAL_CONTENT_URI

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved