Я использую следующий код для обмена аудиофайлами с Android Studio 3.3.2 и Java. Файл извлекается из папки / raw /.
public void funktionTeilen(String file) {
Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/raw/" + file);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/mpeg3");
share.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(share, "Audio teilen"));
}
В принципе, общий доступ работает нормально, но файл отправляется без расширения, что, конечно, делает его недоступным для чтения большинством приложений. Если я добавлю расширение файла вручную (например, после загрузки его из почтового клиента), MP3 будет работать нормально.
«файл» подается другой функцией и соответствует имени файла из необработанной папки. Он также найден в основном, иначе процесс обмена не будет работать вообще.
Итак, как я могу поделиться файлом с сохранением расширения файла? Спасибо за вашу помощь!
Обновление № 1
public void funktionTeilen(String Datei) {
try {
File tmpFile = new File(this.getCacheDir() + "/tmpfile.mp3");
InputStream in = getResources().openRawResource(R.raw.meise1);
FileOutputStream out = new FileOutputStream(tmpFile, true);
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0) {
out.write(buff, 0, read);
}
} finally {
in.close();
out.close();
}
// Uri uri = FileProvider.getUriForFile(this, this.getPackageName(), tmpFile);
Uri uri = Uri.fromFile(tmpFile);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/*");
share.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(share, "Audio teilen"));
} catch (Exception e) {
Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG).show();
}
}