最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 媒體庫(kù)數(shù)據(jù)更新方法總結(jié)

 更新時(shí)間:2017年04月18日 16:07:10   投稿:lqh  
這篇文章主要介紹了Android 媒體庫(kù)數(shù)據(jù)更新方法總結(jié)的相關(guān)資料,需要的朋友可以參考下

Android 媒體庫(kù)數(shù)據(jù)更新方法總結(jié)

在項(xiàng)目中,我們經(jīng)常要?jiǎng)?chuàng)建個(gè)自己的目錄,里面存放一些圖片啊文件之類,比如:我在SD卡中剛創(chuàng)建了一個(gè)文件夾A,里面放入了照片B,那么,這個(gè)時(shí)候我立馬去Gallery里面查看這個(gè)目錄里的照片,那么,我是無(wú)法看到的。

這是什么原因呢?

因?yàn)锳ndroid系統(tǒng)在啟動(dòng)的時(shí)候會(huì)啟動(dòng)MediaScannerService掃描系統(tǒng)上的多媒體文件,然后將這些多媒體文件的信息加入到多媒體數(shù)據(jù)庫(kù)中,應(yīng)用程序要取得這些多媒體信息就是從這個(gè)多媒體數(shù)據(jù)庫(kù)里面去取的,并不是從SD卡中取。也就是說(shuō),如果開(kāi)機(jī)后增加或刪除了一些多媒體,這個(gè)多媒體數(shù)據(jù)庫(kù)是不會(huì)自動(dòng)刷新的。

解決辦法:1,開(kāi)機(jī)重啟;2,更新媒體庫(kù)數(shù)據(jù)信息;

對(duì)于方法1,這個(gè)我們不可能添加個(gè)文件就去重啟一次手機(jī),因此這個(gè)pass。

對(duì)于方法2:

網(wǎng)上常用的方法是通過(guò)廣播發(fā)送消息給系統(tǒng),讓系統(tǒng)自動(dòng)更新一次媒體庫(kù),代碼如下:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"  
     + Environment.getExternalStorageDirectory()))); 

這里,我們可以發(fā)送兩個(gè)消息:Intent.ACTION_MEDIA_MOUNTED 是對(duì)媒體庫(kù)進(jìn)行全掃描;

Intent.ACTION_MEDIA_SCANNER_SCAN_FILE則是 掃描某個(gè)文件; 

經(jīng)測(cè)試,這個(gè)方法對(duì)于android4.4以下的版本,是沒(méi)有問(wèn)題的,但是從android4.4開(kāi)始,使用這個(gè)方法,會(huì)出現(xiàn)如下的異常:

Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

這個(gè)問(wèn)題會(huì)導(dǎo)致APP直接Crash。

經(jīng)過(guò)查看SDK開(kāi)發(fā)文檔,我們發(fā)現(xiàn),上述方法從android4.4開(kāi)始,已經(jīng)不再被允許。開(kāi)發(fā)文檔指出:4.4開(kāi)始,不再允許非系統(tǒng)應(yīng)用發(fā)送系統(tǒng)消息,而Intent.ACTION_MEDIA_MOUNTED正是系統(tǒng)消息,因此,為了解決不同版本的兼容問(wèn)題,我們無(wú)法繼續(xù)使用上述方法。

那要如何解決這個(gè)問(wèn)題呢?

剛剛我們也說(shuō)了,android系統(tǒng)在啟動(dòng)的時(shí)候會(huì)啟動(dòng)MediaScannerService掃描系統(tǒng)上的多媒體文件,那么,我們?nèi)绻诓榭碐allery之前,掃描一次多媒體文件,不是就解決了?

直接上代碼:

private void updateGallery(String filename)//filename是我們的文件全名,包括后綴哦 
  { 
    MediaScannerConnection.scanFile(this, 
         new String[] { filename }, null, 
         new MediaScannerConnection.OnScanCompletedListener() { 
       public void onScanCompleted(String path, Uri uri) { 
         Log.i("ExternalStorage", "Scanned " + path + ":"); 
         Log.i("ExternalStorage", "-> uri=" + uri); 
       } 
     }); 
  } 

有了這個(gè)函數(shù),當(dāng)我們添加一個(gè)圖像文件后,直接調(diào)用一下這個(gè)函數(shù),對(duì)添加的圖像文件進(jìn)行掃描,就OK了,這樣由于只是掃描了我們添加的文件,并非對(duì)整個(gè)媒體庫(kù)文件進(jìn)行掃描,因此,效率最高。經(jīng)測(cè)試,上述方法可以完美解決媒體庫(kù)更新的難題!

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Android使用acoco統(tǒng)計(jì)代碼行覆蓋率介紹

    Android使用acoco統(tǒng)計(jì)代碼行覆蓋率介紹

    大家好,本篇文章主要講的是Android使用acoco統(tǒng)計(jì)代碼行覆蓋率介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android中WindowManager與WMS的解析

    Android中WindowManager與WMS的解析

    今天小編就為大家分享一篇關(guān)于Android中WindowManager與WMS的解析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Input系統(tǒng)之InputReader處理合成事件詳解

    Input系統(tǒng)之InputReader處理合成事件詳解

    這篇文章主要為大家介紹了Input系統(tǒng)之InputReader處理合成事件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別淺析

    Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別淺析

    這篇文章主要介紹了Kotlin語(yǔ)言中CompileSdkVersion和targetSdkVersion有什么區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • Android自定義狀態(tài)欄顏色與APP風(fēng)格保持一致的實(shí)現(xiàn)方法

    Android自定義狀態(tài)欄顏色與APP風(fēng)格保持一致的實(shí)現(xiàn)方法

    我們知道iOS上的應(yīng)用,狀態(tài)欄的顏色總能與應(yīng)用標(biāo)題欄顏色保持一致,用戶體驗(yàn)很不錯(cuò),那安卓是否可以呢?下面小編給大家?guī)?lái)了Android自定義狀態(tài)欄顏色與APP風(fēng)格保持一致的實(shí)現(xiàn)方法,跟著小編一起學(xué)習(xí)吧
    2016-10-10
  • Android使用Retrofit仿微信多張圖片拍照上傳

    Android使用Retrofit仿微信多張圖片拍照上傳

    這篇文章主要介紹了Android使用Retrofit仿微信多張圖片拍照上傳的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android Framework Application Framework層簡(jiǎn)單介紹

    Android Framework Application Framework層簡(jiǎn)單介紹

    這篇文章主要介紹了 Android Framework Application Framework層簡(jiǎn)單介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • android 監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的變化及實(shí)戰(zhàn)的示例代碼

    android 監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的變化及實(shí)戰(zhàn)的示例代碼

    本篇文章主要介紹了android 監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的變化及實(shí)戰(zhàn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Android中ListView下拉刷新的實(shí)現(xiàn)方法

    Android中ListView下拉刷新的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Android中ListView下拉刷新的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android?JobScheduler詳細(xì)介紹

    Android?JobScheduler詳細(xì)介紹

    JobScheduler是Android?5.0引入的系統(tǒng)服務(wù),它可以根據(jù)網(wǎng)絡(luò)狀態(tài)、充電狀態(tài)、電量和存儲(chǔ)狀況等來(lái)觸發(fā)相應(yīng)的JobService執(zhí)行任務(wù),它支持多條件組合、持久性任務(wù),以及在API?21以上版本的Android系統(tǒng)中使用,對(duì)Android?JobScheduler相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評(píng)論

焦作市| 肥乡县| 金乡县| 平武县| 师宗县| 高阳县| 桂平市| 岚皋县| 佛山市| 嫩江县| 海晏县| 平果县| 衡阳市| 丹江口市| 卢氏县| 富源县| 安乡县| 固原市| 谷城县| 舟曲县| 蒙城县| 沈丘县| 浑源县| 平湖市| 阆中市| 无极县| 江孜县| 博湖县| 客服| 石泉县| 靖边县| 封开县| 苍山县| 西青区| 柳江县| 阳春市| 呼伦贝尔市| 扶沟县| 金昌市| 玛曲县| 香河县|