Android 媒體庫圖片签赃,音頻,視頻分尸,文件的查詢

項目開發(fā)中我們要使用到本地SD卡中的媒體文件锦聊,ContentResolver 可以很方便的幫助我們查詢所有信息。

--

1.ContentResolver 中我們要使用到的兩個方式的講解

通過 mContext.getContentResolver();獲取ContentResolver 實例箩绍,查詢使用query 插入使用insert

query(...) 搜索指定Uri下的媒體文件孔庭,后面是sql語句

insert(...) 把新文件插入到指定Uri表中,后面跟數(shù)據(jù)庫鍵值對材蛛。

2.具體參數(shù)的介紹

uri:用于檢索內(nèi)容的 URI
projection:要返回的列的列表圆到。傳遞 null 時,將返回所有列卑吭,這樣會導致效率低下
selection:一種用于聲明要返回哪些行的過濾器芽淡,其格式為 SQL WHERE 子句(WHERE 本身除外)。傳遞 null 時豆赏,將為指定的 URI 返回所有行
selectionArgs:您可以在 selection 中包含 ?s挣菲,它將按照在 selection 中顯示的順序替換為 selectionArgs 中的值富稻。該值將綁定為字串符
sortOrder:行的排序依據(jù),其格式為 SQL ORDER BY 子句(ORDER BY 自身除外)白胀。傳遞 null 時椭赋,將使用默認排序順序(可能并未排序)

3.媒體文件的Uri是如何獲取的

找到MediaStore,里面內(nèi)部類有Images,Audio,Video,Files這幾個包含了所有Android媒體類型或杠,例如我們要查詢圖片則通過Images 得到對應的EXTERNAL_CONTENT_URI就能按照ContentResolver 的方法查詢圖片哪怔,同時Images 中還有縮略圖類,可以通過查詢到圖片的縮略圖廷痘,表的字段名都一樣蔓涧,關(guān)鍵也是Uri,可以通過Images中的Thumbnails獲取。以此類推可以去看看其他幾種媒體類型中的相關(guān)Uri以及字段名和能查詢到的信息笋额。

3. 具體的方法實現(xiàn)

  1. 查詢圖片
    private List<FileItem> getAllPhoto() {

        List<FileItem> photos = new ArrayList<>();

        String[] projection = new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DISPLAY_NAME};


        //asc 按升序排列
        //    desc 按降序排列
        //projection 是定義返回的數(shù)據(jù)元暴,selection 通常的sql 語句,例如  selection=MediaStore.Images.ImageColumns.MIME_TYPE+"=? " 那么 selectionArgs=new String[]{"jpg"};
        Cursor cursor = mContentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_MODIFIED + "  desc");


        String imageId = null;

        String fileName;

        String filePath;

        while (cursor.moveToNext()) {

        imageId = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID));

        fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME));

        filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));

        FileItem fileItem = new FileItem(imageId, filePath, fileName);

        Log.e("ryze_photo", imageId + " -- " + fileName + " -- " + filePath);


        photos.add(fileItem);


        }
        cursor.close();

        cursor = null;

        return photos;

    }

2 .查詢文本文件

     private List<FileItem> getAllText() {

    List<FileItem> texts = new ArrayList<>();

    String[] projection = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.TITLE, MediaStore.Files.FileColumns.MIME_TYPE};

    //相當于我們常用sql where 后面的寫法
    String selection = MediaStore.Files.FileColumns.MIME_TYPE + "= ? "
        + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
        + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
        + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
        + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? ";

    String[] selectionArgs = new String[]{"text/plain", "application/msword", "application/pdf", "application/vnd.ms-powerpoint", "application/vnd.ms-excel"};

    Cursor cursor = mContentResolver.query(MediaStore.Files.getContentUri("external"), projection, selection, selectionArgs, MediaStore.Files.FileColumns.DATE_MODIFIED + " desc");


    String fileId;

    String fileName;

    String filePath;

    while (cursor.moveToNext()) {

      fileId = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));

      fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.TITLE));

      filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));


      Log.e("ryze_text", fileId + " -- " + fileName + " -- " + "--" + cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.MIME_TYPE)) + filePath);

      FileItem fileItem = new FileItem(fileId, filePath, fileName);

      texts.add(fileItem);

    }


    cursor.close();
    cursor = null;


    return texts;

  }

4. 實現(xiàn)效果

分類展示
分類展示
圖片展示
圖片展示

5.源碼和apk

demo

APK

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兄猩,一起剝皮案震驚了整個濱河市茉盏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枢冤,老刑警劉巖鸠姨,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淹真,居然都是意外死亡讶迁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門核蘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巍糯,“玉大人,你說我怎么就攤上這事客扎∷盥停” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵徙鱼,是天一觀的道長宅楞。 經(jīng)常有香客問我,道長袱吆,這世上最難降的妖魔是什么厌衙? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮杆故,結(jié)果婚禮上迅箩,老公的妹妹穿的比我還像新娘。我一直安慰自己处铛,他們只是感情好饲趋,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布拐揭。 她就那樣靜靜地躺著,像睡著了一般奕塑。 火紅的嫁衣襯著肌膚如雪堂污。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天龄砰,我揣著相機與錄音盟猖,去河邊找鬼。 笑死换棚,一個胖子當著我的面吹牛式镐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播固蚤,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娘汞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夕玩?” 一聲冷哼從身側(cè)響起你弦,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎燎孟,沒想到半個月后禽作,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡揩页,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年旷偿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆侣。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狸捅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出累提,到底是詐尸還是另有隱情,我是刑警寧澤磁浇,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布斋陪,位于F島的核電站,受9級特大地震影響置吓,放射性物質(zhì)發(fā)生泄漏无虚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一衍锚、第九天 我趴在偏房一處隱蔽的房頂上張望友题。 院中可真熱鬧,春花似錦戴质、人聲如沸度宦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戈抄。三九已至离唬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間划鸽,已是汗流浹背输莺。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裸诽,地道東北人嫂用。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像丈冬,于是被迫代替她去往敵國和親嘱函。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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