У меня проблема с возможностью обмена. Опция прекрасно работала (и я сохранил ее перед попыткой некоторых модификаций), но я пытался что-то изменить и не смог достичь своей цели).
Цель: щелкнуть по опции в меню,нажмите на общий доступ, если папка «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
Итак ... приложение может получить доступ к папке для создания звука, но по неизвестной причине у меня возникла эта проблема.
Что я сделал не так?