提问者:小点点

storage access framework是否在Xaomi设备上工作?


我有一个应用程序,可以让用户通过存储访问框架打开文件,编辑它们,然后覆盖之前打开的文件。简而言之,这是基本代码:

private ActivityResultLauncher<String[]> mGetContent;
private Uri OpenFileUri;

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mGetContent = registerForActivityResult(new ActivityResultContracts.OpenDocument(),
            new ActivityResultCallback<Uri>() {
                @Override
                public void onActivityResult(Uri uri) {
                    try (InputStream in = getActivity().getContentResolver().openInputStream(uri))
                    {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                        String text = reader.lines().collect(Collectors.joining("\n"));
                        binding.editBox.setText(text);

                        OpenFileUri = uri;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

    binding.buttonOpen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mGetContent.launch(new String[] {"text/*"});
        }
    });

    binding.buttonSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (OpenFileUri == null)
                return;

            try (OutputStream mOutputStream = getActivity().getContentResolver().openOutputStream(OpenFileUri, "wt")) {
                try (PrintWriter p = new PrintWriter(mOutputStream)) {
                    String t = binding.editBox.getText().toString();
                    p.println(t);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}

此处提供完整代码:https://github.com/pekspro/CorruptFileDemo(为不同目的创建)

该应用程序对我的大多数用户来说都运行良好,但有一个用户正在使用Xaomi 11T Pro和Android 11。我无权访问的设备:-(。其他使用Anroid 11的设备运行良好。此用户可以打开文件,但在保存文件时会引发异常(不确定是什么,没有任何日志)。我的真实应用程序也试图调用tePeristableUriPersion,但这也在此设备上引发了一个java.lang.SecurityException

当我运行应用程序并打开文件时,URI为:

content://com.android.externalstorage.documents/document/…

但对于该用户,它的开头是:

content://com.mi.android.globalFileexplorer.myprovider/external_files/Documents/…

这让我怀疑Mi File Manager在Xaomi设备上用作文档选择器。

如果我直接在小米文件管理器中打开一个文件,我看到它只有只读权限。

(某些)Xaomi设备是否会出现此行为?出于测试目的,可以强制我的应用程序使用Mi文件管理器作为文档选择器吗?


共1个答案

匿名用户

storage access framework是否在Xaomi设备上工作?

是的,你发布的所有作品。

只有提供者不提供对用户选择的文件的写访问权限。

(但也许有一个设置,会给它??...)