【问题标题】:ThumbnailUtils.createVideoThumbnail not working for nougat deviceThumbnailUtils.createVideoThumbnail 不适用于牛轧糖设备
【发布时间】:2017-12-20 14:08:32
【问题描述】:
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(localUrl,
     MediaStore.Video.Thumbnails.MINI_KIND);

这里的位图给了我空值。

【问题讨论】:

  • 为什么它不起作用?那是怎么回事?你调试了吗?你谷歌了吗?
  • 它适用于棉花糖及以下版本。但是为牛轧糖提供空位图。
  • 对我来说,它在牛轧糖设备上运行良好。我有 Nexus 5X。你在哪个设备上测试? @PratikKukadia
  • 还要检查是否有任何错误痕迹。
  • 文件路径:/storage/emulated/0/gosurvey/downloads/Video/fb93ced6-945d-4e62-87da-2fab3cd41518.mp4 上面是我要创建缩略图的文件路径。

标签: android file android-7.0-nougat


【解决方案1】:

我遇到的情况完全相同,只是无法在更高版本或高评级设备中创建视频缩略图。您正在 OnActivityResult 中获得类似这样的视频路径。

  if (requestCode == 3 && resultCode == RESULT_OK && data != null && data.getData() != null) {
                    Uri uri = data.getData();
                    String mimeType = getActivity().getContentResolver().getType(uri);
                    String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
                    String[] filePathColumn = {MediaStore.Images.Media.DATA};
                    Cursor cursor = getActivity().getContentResolver().query(uri, filePathColumn, null, null, null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    picturePath = cursor.getString(columnIndex);
                    Log.e("PICTURE PATH", picturePath);
                    File file = new File(picturePath);
                    long length = file.length();
                    length = length / 1024;
                    long length2 = length / 1024;
                    if (length2 > 25) {
                        Toast.makeText(getActivity(), "You cannot upload file more than 25 MB", Toast.LENGTH_SHORT).show();
                    } else {

                        if (mimeType.contains("image")) {
                            Log.e("mimeType", mimeType);
                            Log.e("gif", picturePath);
                            Intent intent = new Intent(getActivity(), UploadImagePostActivity.class);
                            intent.putExtra("DESTINATION", picturePath);
                            startActivity(intent);
                            getActivity().finish();

                        } else if (mimeType.contains("video")) {

                            Log.e("mimeType", mimeType);
                            Log.e("Video path", picturePath);
                            Intent intent = new Intent(getActivity(), UploadVideoPostActivity.class);
                            intent.putExtra("VIDEO_DESTINATION", picturePath);
                            startActivity(intent);
                            getActivity().finish();

                        }
                    }
                }

现在您将获得视频的路径,并且您必须在获得视频路径后制作视频缩略图。有时它可能会引发无法获得正确路径的问题,因为某些设备具有不同的路径层次结构。因此您必须将缩略图保存在特定位置并将其取回。代码如下。

// type 2 for video
    File uri = new File(filePath);

    //create thumbnail image
    thumb = ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MINI_KIND);
    img_tumbnail.setImageBitmap(thumb);

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            try {
                thumbNailfile = savebitmap(thumb);
                Log.e("Thumbnail path", "" + thumbNailfile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

以及保存在特定路径的缩略图文件。现在它将返回正确的文件路径。

// save bitmap into internal memory
public static File savebitmap(Bitmap bmp) throws IOException {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bmp = ((BitmapDrawable) img_tumbnail.getDrawable()).getBitmap();
    bmp.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
    //
    thumnailImagePath = Environment.getExternalStorageDirectory() + File.separator + "123.jpg";
    File f = new File(Environment.getExternalStorageDirectory()
            + File.separator + "123.jpg");
    f.createNewFile();
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
    fo.close();
    return f;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多