繁体   English   中英

无法从 ActivityResultContracts.CreateDocument() 的内容 uri 中获取文件类型

[英]Can't get filetype from content uri from ActivityResultContracts.CreateDocument()

我正在使用 ActivityResultLauncher 允许用户选择一个文件,我将在其中保存位图。 我需要获取用户选择的文件的文件扩展名,以便在保存位图时设置 Bitmap.CompressFormat。 这是我的代码:

    private ActivityResultLauncher<String> activityResultLauncher =
                registerForActivityResult(new ActivityResultContracts.CreateDocument(),
                new ActivityResultCallback<Uri>() {
                    @Override
                    public void onActivityResult(Uri uri) {
                        Timber.d("Result = %s", uri.toString());
                        OutputStream outputStream = null;
                        Bitmap bitmap = cameraViewModel.getImage();
                        try {
                            ContentResolver contentResolver = mainActivity.getContentResolver();
                            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
                            String type = mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
                            outputStream = contentResolver.openOutputStream(uri);
                            if (outputStream != null && bitmap != null) {
                                bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
                                outputStream.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });

该类型始终返回为 null,是否有通过内容 uri 的不透明性并查看实际文件名的方法

摆脱MimeTypeMapContentResolver上调用getType()

该类型始终返回为 null,是否有通过内容 uri 的不透明性并查看实际文件名的方法

不,因为它不一定是文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM