Создайте папку, если она не существует, затем создайте файл и поделитесь им - PullRequest
0 голосов
/ 29 октября 2019

У меня проблема с возможностью обмена. Опция прекрасно работала (и я сохранил ее перед попыткой некоторых модификаций), но я пытался что-то изменить и не смог достичь своей цели).

Цель: щелкнуть по опции в меню,нажмите на общий доступ, если папка «test folder» не существует в папке «MUSIC», создайте ее, если она уже существует, скопируйте звук, поместите его в ранее созданную папку и затем используйте в качестве дополнительного вОТПРАВИТЬ намерение.

            case R.id.share:
            if (isStoragePermissionGranted()) {
                File outputFile = new File("");
                InputStream is = getResources().openRawResource(((Sound) adapter.getItem(index)).getMpsound());
                try {
                    File outputDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC), "Test folder");
                    outputFile = new File(outputDir, getResources().getResourceEntryName(((Sound) adapter.getItem(index)).getMpsound()) + ".mp3");

                    if (outputDir.exists()) {
                        byte[] buffer = new byte[is.available()];
                        is.read(buffer);
                        OutputStream os = new FileOutputStream(outputFile);
                        os.write(buffer);

                        Intent share = new Intent(Intent.ACTION_SEND);
                        share.setType("audio/*");
                        share.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", outputFile));
                        share.putExtra(Intent.EXTRA_TEXT, "\"" + ((Sound) adapter.getItem(index)).getTitle_show() + "\" shared by my app");
                        startActivity(Intent.createChooser(share, "Share Sound File"));
                    } else {
                        outputDir.createNewFile(); //plus add code as below to share the sound after creating the folder
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

Я не могу создать папку, и если я создаю ее вручную, код работает хорошо, потому что mp3 появляется в папке, и сразу после того, как у меня появляется ошибка, которая говорит:

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Music/my app/sound_test.mp3

Итак ... приложение может получить доступ к папке для создания звука, но по неизвестной причине у меня возникла эта проблема.

Что я сделал не так?

1 Ответ

0 голосов
/ 30 октября 2019

Итак, для тех, кто приходит через несколько дней, месяцев, лет с той же проблемой:

Как сказал CommonsWare, проблема с доступом к папке была из FileProvider. После правильной настройки с правильным путем у меня больше не было проблем.

Для части, касающейся создания новой папки, .createNewFile() не кажется правильным. Необходимо использовать .mkdir()

И для завершения, часть, касающаяся удаления файлов в папке, вы получите там ответ:

File dir = new File(Environment.getExternalStorageDirectory()+"Dir_name_here"); 
if (dir.isDirectory()) 
{
    String[] children = dir.list();
    for (int i = 0; i < children.length; i++)
    {
       new File(dir, children[i]).delete();
    }
}

Источник: Как удалить все файлы в каталоге Java-приложения для Android? Текущий код удаляет эту папку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...