Поделиться необработанным ресурсом через WhatsApp (без SD-карты)

Я пытаюсь поделиться mp3-аудио из приложения, проблема в том, что звук отправляется без формата, я читал о его сохранении во внешнюю память, а затем делюсь им, но у меня нет внешней памяти, есть способ сохранить его во внутреннюю память или что-то в этом роде? Благодарю. вот код:

Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.setType("audio/mpeg3");
            sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Los simuladores");
            sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://arg.com.cevascoit.botoneralossimuladores/" + R.raw.teagachas));
            startActivity(Intent.createChooser(sendIntent, getString(R.string.app_name)));

            return false;

«но у меня нет внешней памяти» - почти каждое устройство Android имеет внешнее хранилище. «(Нет SD-карты)» - SD-карта - это не то, что Android SDK называет внешним хранилищем.

CommonsWare 23.06.2018 21:34

Ой, извините, я новичок в этом. Тогда почему, когда я использую код для сохранения во внешнем хранилище, у меня возникает ошибка?

luca cevasco 23.06.2018 22:43

Вы можете задать отдельный вопрос о переполнении стека, где вы указываете минимальный воспроизводимый пример. Это будет включать сведения об ошибке (например, трассировку стека) и ваш код, который вызывает ошибку.

CommonsWare 23.06.2018 22:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
60
1

Ответы 1

Используйте FileProvider, как в этом примере:

Сначала создайте файл во внутренней памяти (например, ваш mp3-файл)

File sharedDir = new File(getFilesDir(), "shared");
if (!sharedDir.exists())
   sharedDir.mkdir();

File fileToShare = new File(sharedDir, "hello_world.txt");

Writer writer = new OutputStreamWriter(new FileOutputStream(fileToShare));
writer.write("Hello World");
writer.close();

Затем определите FileProvider в манифесте

<provider
  android:name = "android.support.v4.content.FileProvider"
  android:authorities = "ese.fileprovider"
  android:grantUriPermissions = "true"
  android:exported = "false">
  <meta-data
    android:name = "android.support.FILE_PROVIDER_PATHS"
    android:resource = "@xml/filepaths" />;
</provider>;

Затем укажите каталоги для совместного использования в filepaths.xml.

<files-path
      name = "shared files"
      path = "shared/" />

Создайте URI для файла

Uri uri = FileProvider.getUriForFile(this, "ese.fileprovider", fileToShare);

Поделиться файлом

Intent shareFile = new Intent(Intent.ACTION_SEND);

shareFile.setType("application/pdf");
shareFile.putExtra(Intent.EXTRA_STREAM, uri);
shareFile.putExtra(Intent.EXTRA_SUBJECT, "Sharing " + fileToShare.getName());
shareFile.putExtra(Intent.EXTRA_TEXT, "Sharing File");

startActivity(Intent.createChooser(shareFile, "Share File"));

Другие вопросы по теме