編輯:關於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();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);
}MediaStore.Images.Media.EXTERNAL_CONTENT_URI
。
android開發之ToggleButton控件
ToggleButton可以認為是一個開關,每單擊依次一次在“開”和“關”之間進行切換。 ToggleButto
Android編程實現自定義輸入法功能示例【輸入密碼時防止第三方竊取】
本文實例講述了Android編程實現自定義輸入法功能。分享給大家供大家參考,具體如下:對於Android用戶而言,一般都會使用第三方的輸入法。可是,在輸入密碼時(尤其是支
Android-銀聯支付
銀聯支付也是一般比較常用的支付功能,這裡簡單了介紹android app如果短期快速應用這一方面的東西。直接上代碼: 1.導入銀聯支付的依賴包: 2.在res目錄下增
Android ViewGroup觸摸事件攔截詳解
前言 在自定義ViewGroup中,有時候需要實現觸摸事件攔截,比如ListView下拉刷新就是典型的觸摸事件攔截的例子。觸摸事件攔截就是在觸摸事件被parent vie