如何从牛轧糖上传选定的视频,路径返回空

How to upload selected video from nougat, path returning null

我想从图库上传视频 selecting。

我正在使用 Intent select 来自设备的视频:

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。 我开始知道牛轧糖有变化,但找不到任何解决方案。

我的代码适用于 android 所有版本,牛轧糖除外。

请大家帮忙。


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

My code is working in all versions of android except nougat.

不是真的。它可能适用于一些设备上的几个场景。

您的代码假定您返回的 Uri

  • content方案
  • 来自供应商,当在 Uri
  • 上查询时,该供应商将为 MediaStore.Video.Media.DATA return 提供一些值
  • 是指向外部存储的路径,因此您可以使用

None 必然为真:

  • 在旧设备上,您更有可能通过 file 方案获得 Uri
  • 任何应用程序都可以为 video/* 实施 ACTION_GET_CONTENT,并且他们可以为 Uri
  • 交回他们想要的任何东西
  • MediaStore 以外的提供者不必兑现 MediaStore.Video.Media.DATA
  • MediaStore 索引可移动存储上的媒体,其路径对您无用,因为您无法读取 Android 4.4+
  • 上可移动存储上的任意位置

要使用 content Uri,请在 ContentResolver 上调用 openInputStream(),以获得内容上的 InputStream。直接使用 InputStream,或者使用它来将内容复制到您控制的文件中的某些 FileOutputStream