首页 > 解决方案 > 如何实现范围存储以从库中选择视频并将其发送到 Android 10 上的另一个 Activity

问题描述

在我的应用程序中,我有 2 个按钮,一个用于打开相机并录制视频,另一个用于从图库中选择视频,然后我使用意图将视频发送到另一个活动。它在除 android 10 之外的所有 android 版本上都能正常工作

private void openVideoCapture() {
        String[] perms = {Manifest.permission.CAMERA};
        if (EasyPermissions.hasPermissions(this, perms)) {
            final int durationLimit = 600;
            Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, durationLimit);
            startActivityForResult(intent, REQUEST_VIDEO_TRIMMER);
        } else {
            // Do not have permissions, request them now
            EasyPermissions.requestPermissions(this, getString(R.string.permission_camera), 123, perms);
        }

    }
    @AfterPermissionGranted(124)
    private void pickFromGallery() {
        String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE};
        if (EasyPermissions.hasPermissions(this, perms)) {
            Intent intent = new Intent();
            intent.setTypeAndNormalize("video/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(Intent.createChooser(intent, getString(R.string.label_select_video)), REQUEST_VIDEO_TRIMMER);
        } else {
            EasyPermissions.requestPermissions(this, getString(R.string.permission_read_storage_rationale), 124, perms);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_VIDEO_TRIMMER) {
                final Uri selectedUri = data.getData();
                if (selectedUri != null) {
                      startTrimActivity(selectedUri);
                } else {
                    Toast.makeText(MainActivity.this, R.string.toast_cannot_retrieve_selected_video, Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    private void startTrimActivity(@NonNull Uri uri) {
        Intent intent = new Intent(this, TrimmerActivity.class);
        intent.putExtra(EXTRA_VIDEO_PATH, FileUtils.getPath(this, uri));
        startActivity(intent);
    }

标签: androidandroid-studioandroid-10.0android-external-storagescoped-storage

解决方案


推荐阅读