2015-11-09 398 views
0

我想在ImageView中顯示縮略圖視頻。視頻由用戶上傳並存儲在服務器上。目前,我還沒有設置任何存儲和上傳視頻的機制,因此我正在使用使用http協議訪問的示例視頻文件進行測試。但是,this後說,如果URI方案的形式爲內容的不用http顯示視頻的縮略圖

ContentResolver.query返回null://

是我的方法不對?有沒有可能使用這種方法與http?

這是我的測試代碼:

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.testlayout); 
    Uri uri = Uri.parse("http://download.wavetlan.com/SVV/Media/HTTP/BlackBerry.3gp"); 
    Log.i("m",getRealPathFromURI(this, uri)); 
} 
public String getRealPathFromURI(Context context, Uri contentUri) { 
    Cursor cursor = null; 
    try { 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
    if (cursor == null) 
    { 
     Log.i("m","null"); 
     return ""; 
    } 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
    } finally { 
    if (cursor != null) { 
     cursor.close(); 
    } 
    } 
} 

回答

1

有你的代碼的問題。

您的getRealPathFromURI()目前在大約6億臺Android設備上(運行Android 4.4或更高版本的所有設備)一般都處於打破狀態,對於任何Uri值都是如此,更不用說您正在嘗試使用的設備了。 A Uri is not a file。無論你從哪裏得到Uri,它都可能不會指向MediaStore。即使它是來自MediaStore的東西,也不會從MediaStore通過DATA獲得文件路徑。即使可以獲取文件路徑,也可能無法訪問該文件(例如,它存儲在removable storage中)。

MediaStore是本地內容的索引。因此,在您的特定情況下,除非您的Android設備正在運行託管於download.wavetlan.com的網絡服務器,否則您網址上的內容不是本地的,因此MediaStore對此一無所知。

請讓您的服務器生成縮略圖,然後您可以使用image loading library(如Picasso)來獲取縮略圖。

+0

我喜歡這樣的答案。尤其是最後一段。事實上,我盲目複製和粘貼代碼(主要原因是我不知道這種方法是否正確)。你確實回答了我的主要問題。 – mok