Android 掃描圖庫

平時(shí)選擇圖片框架用得多了,自然對背后的實(shí)現(xiàn)原理感興趣衙解。
那么鸥跟,最基本的應(yīng)該時(shí)遍歷圖庫的文件了吧,在不用任何第三方庫的前提下枫匾,怎么實(shí)現(xiàn)干茉?用到哪些類?具體怎么寫很泊?

1. ContentResolver
2. Cursor

其實(shí)就是跨應(yīng)用共享數(shù)據(jù)角虫,這里只需要用到這兩個(gè)類就可以遍歷圖庫文件了戳鹅,在此之前順便復(fù)習(xí)一下四大組件之一的內(nèi)容提供者

ContentProvider簡介

  • ContentProvider內(nèi)容提供者(四大組件之一)主要用于在不同的應(yīng)用程序之間實(shí)現(xiàn)數(shù)據(jù)共享的功能。

平時(shí)只知其一不知其二枫虏,實(shí)際上內(nèi)容提供者除了提供內(nèi)容的provider以外還有一個(gè)解釋內(nèi)容的resolver,當(dāng)別的應(yīng)用想對某 ContentProvider 增刪改查的操作時(shí)腾它,可以通過 ContentResolver 類來完成瞒滴。

掃描文件

掃描文件.PNG

我們的目標(biāo)就是拿到以上的數(shù)據(jù),至于之后怎么顯示在控件上怎么操作就隨自由發(fā)揮了赞警。ok, talk is cheap, show me the code

public void scanImages(){
        String[] IMAGES = {
                MediaStore.Images.Media.DATA,
                MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
                MediaStore.Images.Media.MIME_TYPE,
                MediaStore.Images.Media.SIZE};
        ContentResolver cr = context.getContentResolver();
        Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGES,null,null,null);
        if(cursor != null){
            while(cursor.moveToNext()){
                String path = cursor.getString(0);
                String bucketName = cursor.getString(1);
                String mimeType = cursor.getString(2);
                long size = cursor.getLong(3);
                Log.i("-->file",path+","+bucketName+","+mimeType+","+size);
            }
            cursor.close();
        }
    }

如果你在跑這段代碼拋了異常妓忍,而且是permissions異常,那么要學(xué)會自己處理了仅颇。這里通過上下文就可以獲得 ContentResolver 對象了单默,緊接著是執(zhí)行了 query 方法,方法里面有5個(gè)參數(shù)忘瓦。分別是

query(
Uri: using the content:// scheme, for the content to retrieve.
projection: A list of which columns to return. Passing null will return all columns, which is inefficient.
selection: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given URI.
selectionArgs: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings.
sortOrder: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.
)

這里Uri是必須傳搁廓,因?yàn)椴樵兊酶嬖V在哪里查起嘛,接下來得幾個(gè)參數(shù)就是根據(jù)什么條件來查耕皮,一般看情況自己選擇境蜕,我在這里自定義了一個(gè) IMAGES 傳給了第二個(gè)參數(shù),意思就是只返回這四個(gè)屬性回來就好了.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凌停,一起剝皮案震驚了整個(gè)濱河市粱年,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拉队,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漫雷,死亡現(xiàn)場離奇詭異,居然都是意外死亡澎现,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門椎眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舔稀,“玉大人,你說我怎么就攤上這事夜郁【憾耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我募寨,道長仪缸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮片林,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒋伦。我一直安慰自己韧献,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般迈窟。 火紅的嫁衣襯著肌膚如雪车酣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音鸭津,去河邊找鬼。 笑死父泳,一個(gè)胖子當(dāng)著我的面吹牛蒸眠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒋腮,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼池摧,長吁一口氣:“原來是場噩夢啊……” “哼膘魄!你這毒婦竟也來了创葡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荸百,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爆雹,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年崇呵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡座云,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出璧帝,到底是詐尸還是另有隱情苏潜,我是刑警寧澤贴唇,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站巷折,受9級特大地震影響击蹲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟹腾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一卧晓、第九天 我趴在偏房一處隱蔽的房頂上張望波附。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽账蓉。三九已至箱玷,卻和暖如春舶得,著一層夾襖步出監(jiān)牢的瞬間蝎亚,已是汗流浹背梅惯。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工魄梯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辣苏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像茫藏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子务傲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,334評論 0 10
  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa閱讀 8,867評論 0 6
  • 你覺得好就好多聽從內(nèi)心的聲音 時(shí)刻問問自己的內(nèi)心
    施小施閱讀 168評論 0 0
  • 1.如何定義一個(gè)協(xié)議協(xié)議只是聲明方法(接口)诺祸,沒有具體的實(shí)現(xiàn),誰服從我,誰就實(shí)現(xiàn) 2.如何使用一個(gè)協(xié)議
    Mustard_Buli閱讀 186評論 0 0
  • 從微專業(yè)順利畢業(yè)饺蚊,看完所有的視頻課程并不是必須的條件,而是按照在按照要求完成所有單課程的里程碑作業(yè)和考試。 單課程...
    tianhaoray閱讀 135評論 0 0