Можно ли использовать Android Storage Access Framework для создания файлов на Google Диске?

Мне известен похожий вопрос, который автор использует Xamarin.

Приложение использует SAF для создания текстового файла в локальном хранилище, запуская средство выбора системных файлов без каких-либо проблем. Пользователь может использовать средство выбора файлов, чтобы выбрать локальную папку или папку Google Диска. Опять же, он отлично работает, если пользователь выбирает локальную папку. Если пользователь выбирает папку на Google Диске, новый файл всегда создается без проблем, но он имеет нулевые байты. Я поделился и скачал файл, чтобы убедиться, что он пуст.

Ниже приведен соответствующий код:

launcherExportFileSelection = requireActivity().registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            try {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Uri uri = result.getData().getData();
                    ParcelFileDescriptor pfd = requireActivity().getContentResolver().openFileDescriptor(uri, "w");
                    if (pfd == null) {
                        
                    } else {
                        FileOutputStream fileOutputStream = new FileOutputStream(pfd.getFileDescriptor());
                        fileOutputStream.write(stringText.getBytes());
                        fileOutputStream.flush();
                        fileOutputStream.close();
                    }
                } else {
                    
                }
            } catch (Exception ex) {
                
            }
        }); 

Я также пробовал BufferedOutputStream следующим образом, но безрезультатно:

launcherExportFileSelection = requireActivity().registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            try {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Uri uri = result.getData().getData();
                    ParcelFileDescriptor pfd = requireActivity().getContentResolver().openFileDescriptor(uri, "w");
                    if (pfd == null) {
                        
                    } else {
                        FileOutputStream fileOutputStream = new FileOutputStream(pfd.getFileDescriptor());
                        BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
                        bos.write(stringText.getBytes());
                        bos.flush();
                        bos.close();
                        fileOutputStream.flush();
                        fileOutputStream.close();
                    }
                } else {
                    
                }
            } catch (Exception ex) {
                
            }
        });

Никаких исключений не выбрасывается. Может ли кто-нибудь пролить свет на это?


person Hong    schedule 16.04.2021    source источник