我在尝试在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中创建了一个测试应用程序并且具有完全相同的问题。
谢谢!
答案 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());
}