2012-11-12 29 views
3

我遇到了一個奇怪的錯誤與視頻Intents,我沒有經歷過,直到Android 4.1。我的代碼是Intent。根據官方Android開發者網站Intents and Intent filters的說法,我也嘗試了其他MIME類型,其中包括視頻/ mp4,但通配符(* video/**)應該工作得很好。奇怪的錯誤與視頻意圖果凍豆

Intent videoIntent = new Intent(); 
videoIntent.setAction(Intent.ACTION_VIEW); 
videoIntent.setData(Uri.parse(fileUrl)); 
videoIntent.setType("video/*"); 

startActivity(videoIntent); 

在我的設備,無論是運行Android 4.1,這導致在ActivityNotFoundException,因爲它說沒有安裝的應用程序可以處理Intent。這很奇怪,因爲它一直在Android的所有以前的版本上工作,並且它應該在默認的視頻播放器中啓動。

許多第三方視頻播放器能夠處理Intent,所以我想知道爲什麼它不再與默認視頻播放器一起工作。

任何想法?

這似乎是同一個問題:

Video player not working on Jelly Bean device :android.content.ActivityNotFoundException

回答

4

我設法找到與別人一點幫助的解決方案。看起來setType()呼叫清除任何以前附加的數據,包括setData()呼叫。根據文檔:

此方法自動清除以前設置的任何數據(對於由setData(Uri)示例的 )。

當我改爲setDataAndType()而不是它的工作。看來,這不是Jelly Bean系統的問題畢竟,幸運:-)

下面是創建的視頻目的最終代碼:

public static Intent getVideoIntent(String fileUrl) { 
    Intent videoIntent = new Intent(Intent.ACTION_VIEW); 
    videoIntent.setDataAndType(Uri.fromFile(new File(fileUrl)), getMimeType(fileUrl)); 

    return videoIntent; 
} 

public static String getMimeType(String url) { 
    String type = null; 
    String extension = MimeTypeMap.getFileExtensionFromUrl(url); 

    if (extension != null) { 
     MimeTypeMap mime = MimeTypeMap.getSingleton(); 
     type = mime.getMimeTypeFromExtension(extension); 

     if (TextUtils.isEmpty(type)) 
      type = "video/*"; // No MIME type found, so use the video wildcard 
    } 

    return type; 
}