標籤:
在4.4版本之前,我們可以使用發送廣播的方式,強制重新整理多媒體庫
IntentFilter intentFilter = new IntentFilter( Intent.ACTION_MEDIA_SCANNER_STARTED); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addDataScheme("file"); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory() .getAbsolutePath())));
發送廣播之後,還需要註冊一個廣播接受者,來接受並處理掃描開始和結束事件
private class ScanReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // 當系統開始掃描sd卡時,為了使用者體驗,可以加上一個等待框 if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)) { } // 當系統掃描完畢時,停止顯示等待框,並重新查詢ContentProvider if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) { } } }
通過這種方式,我們便可以強制更新媒體庫。
但是,在4.4之後,Android對一些操作的許可權提高,如果在4.4的系統上使用這種方式,便會出現下面的錯誤
Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=22360, uid=10163
這是因為在4.4之後,這個廣播只有系統應用才能發出,因此,我們不能使用這種方式了,我們可以使用下面的代碼實現相同的功能:
MediaScannerConnection.scanFile(this, new String[] { Environment .getExternalStorageDirectory().getAbsolutePath() }, null, null);
使用MediaScannerConnection的scanFile方法,就可以強制掃描我們需要更新的檔案路徑,之後媒體資料庫也會同步更新,這樣,就不會出現檔案刪除,在媒體庫中卻能搜尋到的情況了,也能解決這位朋友提出的新增加歌曲的資訊擷取問題了。
原文:
http://www.tuicool.com/articles/vyYZny
如何擷取媒體庫中所有音頻檔案資訊,並在檔案增刪後及時更新媒體庫