无法通过Fileoutputstream在Android 10 MediaStore中存储视频

问题描述 投票:0回答:1

我正在使用此代码将视频文件写入android中的Mediastore。当我尝试通过模拟器播放视频或在文件浏览器中签入视频时,视频大小仅为12B。 (我正在android 10中尝试此应用)

而且它没有播放。

在模拟器中,它的谚语无法播放视频。当我单击视频时,在文件中。仅出现黑屏。

但是当我将字节保存在专用数据存储区中时,我可以在模拟器中播放该文件。请帮助。

       @Override
        protected void onPostExecute(byte[] video){
            ContentResolver resolver = getApplicationContext().getContentResolver();
            Uri videocollection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);

            System.out.println("Resolver --");
            System.out.println(resolver);

            System.out.println(videocollection);
            ContentValues videodetails = new ContentValues();
            videodetails.put(MediaStore.Video.Media.DISPLAY_NAME,"Earth_8.mp4");
            videodetails.put(MediaStore.Video.Media.MIME_TYPE,"video/mp4");
            videodetails.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/GrailVideos");
            videodetails.put(MediaStore.Video.Media.IS_PENDING , 1 );
            System.out.println("done till here ");
//            videodetails.put(MediaStore.Video.Media.DATA , video);
//            MediaStore.Video.Media.EXTERNAL_CONTENT_URI
            Uri myvideo = resolver.insert(  videocollection , videodetails);
            System.out.println("Done......"+ myvideo );

            try {
                final ParcelFileDescriptor pdf = resolver.openFileDescriptor(myvideo, "w" );
                FileDescriptor fd = pdf.getFileDescriptor();
                byte[] temp = video;
//                FileInputStream input = new FileInputStream(fd);
                FileOutputStream output = new FileOutputStream(fd);
                output.write(temp);
                output.close();

                pdf.close();
                System.out.println("*&&% DOne .. ");


            } catch (FileNotFoundException e) {
                e.printStackTrace();
                System.out.println("error 1");
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("error 2");
            }
            videodetails.put(MediaStore.Video.Media.IS_PENDING , 0 );
            resolver.update(myvideo, videodetails , null, null);



            final VideoView myvideoview = (VideoView) findViewById(R.id.videoView);
            myvideoview.setVideoURI(myvideo);
//            myvideoview.setVideoPath(getApplicationInfo().dataDir +"/temp_video.mp4");
            myvideoview.start();
     }
java android fileoutputstream mediastore
1个回答
-1
投票

您可以尝试写字节:

stream = resolver.openOutputStream(myvideo);

try {

int bytesRead;

inputStream = new ByteArrayInputStream(video);

while ((bytesRead = inputStream.read(video)) > 0) {
       stream.write(video, 0, bytesRead);
}

inputStream.close();
stream.flush();
stream.close();

} catch (IOException e) {
   closeSession(resolver, uriResolve, e);
   e.printStackTrace();
}
© www.soinside.com 2019 - 2024. All rights reserved.