2012-01-24 65 views
0

使用選配兩個獨立的內容URI標識:Android:閱讀內容uris。同樣的文件返回與交換數字

Intent intent = new Intent(); 
intent.setType("audio/mp3"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
startActivityForResult(Intent.createChooser(intent, context.getResources().getString(R.string.select)), GET_URI); 

我得到的音頻文件。我把這個Uri保存在本地數據庫中以便以後訪問。我發現對於選定的某首歌曲,當您嘗試使用它創建MediaPlayer時,內容uri會返回空值。我想這應該是同一首歌曲的內容URI再看看會發生什麼,果然:

舊,破的內容URI:content://media/external/audio/media/2478

新,工作內容URI:content://media/external/audio/media/2487

相同的保存最後兩位數字被交換。獲得這個Uri的方法在我的兩次嘗試之間沒有改變。這是一個已知的問題嗎?我的谷歌和SO搜索沒有結果。但是,如果內容uris有習慣於失讀的習慣,這是一個問題,因爲沒有真正的方法來彌補這個問題,因爲沒有重新獲得歌曲的內容uri,必須手動完成,因爲沒有辦法參考歌曲的文件路徑與錯誤的內容uri。

任何想法?

回答

0

其中一些是閱讀障礙!

緩存由內容提供者公開的一些字段。所以他們不保證新鮮。既然你沒有指定你獲得這個URI的方式,我不知道它是否是一個緩存值。

您可以查看代碼並自行計算出來。

http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/provider/MediaStore.java

+0

是的,內容開放的我昨天再次刷新未能準確與此相同的問題。我沒有意識到內容uris有時可以改變價值!我認爲在將來我會使用Uri文件來代替保存歌曲的位置。 – JMRboosties

+0

確保您閱讀了使用的Uris文檔。 –