微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AndroidX使用文件名保存视频

如何解决AndroidX使用文件名保存视频

我使用了博客中的相机应用实现。该博客提供了拍摄照片并将其保存在应用程序内某个位置的步骤。我正在尝试用视频文件复制同样的内容

以下是我的代码

private void chooseImageFromgallery() {
    Dexter.withActivity(this)
            .withPermissions(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE)
            .withListener(new MultiplePermissionsListener() {
                @Override
                public void onPermissionsChecked(MultiplePermissionsReport report) {
                    if (report.areAllPermissionsGranted()) {
                        videoFileName = System.currentTimeMillis() + ".mp4";
                        SaveSharedPreference.setimageName( getApplicationContext(),videoFileName );
                        Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                        videoIntent.putExtra(MediaStore.EXTRA_OUTPUT,getCacheImagePathForVideo(videoFileName));
                        if (videoIntent.resolveActivity( getPackageManager()  )!= null) {
                            startActivityForResult( videoIntent,REQUEST_VIDEO_CAPTURE );
                        }
                    }
                }
                @Override
                public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions,PermissionToken token) {
                    token.continuePermissionRequest();
                }
            }).check();
}

  protected void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult( requestCode,resultCode,data );
      
            case REQUEST_VIDEO_CAPTURE:
                if (resultCode == RESULT_OK) {
                    videoUri = data.getData();
                    setResultOk(videoUri);
                } else {
                    setResultCancelled();
                }
                break;
            default:
                setResultCancelled();
        }
    }

  private void setResultOk(Uri imagePath) {
        Intent intent = new Intent();
        intent.putExtra("path",imagePath);
        Log.i("Path:",imagePath.toString());
        setResult( Activity.RESULT_OK,intent);
        finish();
    }

  private Uri getCacheImagePathForVideo(String fileName) {
        File path = new File(getExternalCacheDir(),"camera");
        if (!path.exists()) path.mkdirs();
        File videoFil = new File(path,videoFileName);
        return getUriForFile(ImagePickerActivity.this,getPackageName() + ".provider",videoFil);
    
    }

类似的代码适用于图像,但不适用于视频。我不确定我的activityResult操作是否正确。

此外,没有文件名引用的相同代码将视频保存在mnt / sdcard / Camera / VID _ **。mp4

这是我的第一个应用程序...因此,很多事情对我来说都是新的。

解决方法

浏览Android文档后我解决了。以下是对我有用的。

Android清单

在内部应用程序标签中添加以下内容:

 <provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.reluai.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />  //create this file in xml folder as xml resource file.  If you do not have this folder create one.
 </provider>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images" path="images/"/>
    <files-path name="my_videos" path="videos/"/>
</paths>

我想在我的应用程序名称和图像中创建两个文件夹。这些文件夹被创建为名为files的文件夹内的子文件夹。

在我的活动中。java

以下是用于创建图像文件夹的代码。

private Uri getCacheImagePath(String fileName) {
        File imagePath = new File(getApplicationContext().getFilesDir(),"images");
        if (!imagePath.exists()) imagePath.mkdirs();
        File newFile = new File(imagePath,fileName);
        Uri contentUri = getUriForFile( getApplicationContext(),"com.example.fileprovider",newFile );
        return contentUri;
    }

视频的提供程序Uri功能完全相同。只需确保为File,Uri等提供了不同的名称。适合视频。

图像捕获:

private void takeCameraImage() {
        Dexter.withActivity(this)
                .withPermissions(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .withListener(new MultiplePermissionsListener() {
                    @Override
                    public void onPermissionsChecked(MultiplePermissionsReport report) {
                        if (report.areAllPermissionsGranted()) {
                            fileName = System.currentTimeMillis() + ".jpg";
                            SaveSharedPreference.setImageName( getApplicationContext(),fileName );
                            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,getCacheImagePath(fileName));
                            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                                startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);
                            }
                        }
                    }
                    @Override
                    public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions,PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                }).check();
    }

如果您不使用Dexter来管理权限,则可以删除该部分。 上面将单击的图像添加到图像文件夹。为视频定制的类似代码也可以使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。