在Android上选择视频

时间:2015-11-09 12:24:46

标签: android video xamarin

我在尝试在Android上选择照片时遇到问题。我正在使用以下代码启动活动。

var intent = new Intent ();
intent.SetType ("video/*");
intent.SetAction (Intent.ActionGetContent);
intent.PutExtra (MediaStore.ExtraVideoQuality, 0);
intent.PutExtra (MediaStore.ExtraDurationLimit, Globals.VideoMaxDuration);
this.StartActivityForResult (Intent.CreateChooser (intent, "Select video"), 200);

然后在OnActivityResult回调中,我使用以下代码来获取数据的URI。

if (resultCode == Result.Ok && data.Data != null)
{
    String[] proj = { MediaStore.Images.Media.InterfaceConsts.Data };
    ICursor cursor = this.ContentResolver.Query(data.Data, proj, null, null, null);
    int colIndex = cursor.GetColumnIndexOrThrow (MediaStore.Video.Media.InterfaceConsts.Data);
    cursor.MoveToFirst ();
    vid = cursor.GetString(colIndex);

    // do stuff with vid
}

这在从"画廊"中选择视频时效果很好。选项,但当我尝试从"最近"或"下载"选择器的各个部分VID始终为空。

有没有人知道如何可靠地从视频选择器意图中获取视频数据?此外,代码在C#中,因为这是一个Monotouch(Xamarin)应用程序,但我在原生Android中创建了一个测试应用程序并且具有完全相同的问题。

谢谢!

1 个答案:

答案 0 :(得分:2)

基本上这段代码来自这篇文章。有关更多信息或如何从uri获取路径,请参阅此link

要检查是否是下载文件,您必须使用以下代码。

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is DownloadsProvider.
 */
public static boolean isDownloadsDocument(Uri uri) {
    return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is MediaProvider.
 */
public static boolean isMediaDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}