如何从nougat上传所选视频,路径返回null

时间:2017-02-28 12:33:08

标签: android android-7.0-nougat

我想从图库中选择上传视频。

我正在使用Intent从设备中选择视频:

Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_VIDEO_REQUEST);

之后:

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_TAKE_GALLERY_VIDEO) {
                Uri filePath = data.getData();
                try {
                    String[] projection = {MediaStore.Video.Media.DATA};
                    Cursor cursor = getContentResolver().query(filePath, projection, null, null, null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(projection[0]);
                    String videoPath = cursor.getString(columnIndex);
                } catch (Exception e) {
                    Log.e("error", e.getMessage());
                }

            }
        }
    }

但是当我在onActivityResult()中获取路径时,它返回null。 我发现牛轧糖有变化,但无法找到解决办法。

我的代码在除了nougat之外的所有版本的android中都有效。

请任何人帮忙。

2 个答案:

答案 0 :(得分:2)


"Android-Multipicker-Library"允许您在Android中选择任何类型的路径,特别是" Nougat"

答案 1 :(得分:0)

  

我的代码在除了nougat之外的所有版本的android中都有效。

不是真的。它可能适用于几种设备上的几种情况。

您的代码假定您获得的Uri

  • content计划
  • 来自提供商,当MediaStore.Video.Media.DATA
  • 查询时,该提供商会返回Uri的某些值
  • 该路径是外部存储的路径,因此可以使用

这些都不一定是真的:

  • 在较旧的设备上,您更有可能获得Uri计划的file
  • 任何应用都可以为ACTION_GET_CONTENT实施video/*,他们可以将所需的内容交回Uri
  • MediaStore以外的提供商不必尊重MediaStore.Video.Media.DATA
  • MediaStore索引可移动存储上的媒体,其路径对您无用,因为您对Android 4.4 +上的可移动存储上的任意位置没有读取权限

要使用content Uri,请在openInputStream()上致电ContentResolver,以获取内容的InputStream。可以直接使用InputStream,也可以使用它将内容的副本复制到您控制的文件上的某些FileOutputStream