Получить URI файла .mp3, хранящегося в папке res / raw в android

У меня много файлов .mp3, хранящихся в папке res / raw.

Я получаю URI файла .mp3, используя следующий код.

Uri.parse("android.resource:///com.my.android.sharesound/"+resId); 

Это возвращает: android.resource:///com.my.android.sharesound/2130968609

Теперь я использую этот URI для создания Share Intent

  shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("android.resource://com.my.android.sharesound/"+resId)); startActivity(Intent.createChooser(shareIntent,"Share Sound"); 

Когда я выбираю любое почтовое приложение, например. Gmail или YahooMail из Акта совместного использования, mp3-файл прилагается успешно. Но это показывает, что 2130968609 (как приложение)

Я не хочу, чтобы resourceId (2130968609) появлялся.

Я хочу показать fileName.mp3

Как я могу это сделать? Я что-то упускаю ?

ИЛИ

Есть ли другой способ подключить файл .mp3, хранящийся в res / raw для почты через Share Intent.

Solutions Collecting From Web of "Получить URI файла .mp3, хранящегося в папке res / raw в android"

Наконец, после многого поиска я нашел решение.

Если вы хотите получить URI ресурса, есть два способа:

  1. Использование имени ресурса

    Синтаксис: android.resource://[package]/[res type]/[res name]

    Пример: Uri.parse("android.resource://com.my.package/drawable/icon");

  2. Использование идентификатора ресурса

    Синтаксис: android.resource://[package]/[resource_id]

    Пример: Uri.parse("android.resource://com.my.package/" + R.drawable.icon);

Это были примеры получения URI любого файла изображения, хранящегося в папке с возможностью переноса.

Аналогичным образом вы можете получить URI для папки res / raw.

В моем случае я использовал 1-й способ, т.е. Использование имени ресурса

Эта работа похожа на магию: Предполагая, что mp3 сохранен в необработанной папке как

notification_sound.mp3

То простое выполнение этого работает:

 Uri uri=Uri.parse("android.resource://"+getPackageName()+"/raw/notification_sound"); 

Попробуйте сохранить файл на SDCard и, возможно, затем отправьте новый URI,

  public boolean saveAs(int resSoundId){ byte[] buffer = null; InputStream fIn = getBaseContext().getResources().openRawResource(resSoundId); int size=0; try { size = fIn.available(); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block return false; } String path = "/sdcard/yourapp/temp/"; String filename = "filename"+".mp3"; boolean exists = (new File(path)).exists(); if (!exists){new File(path).mkdirs();} FileOutputStream save; try { save = new FileOutputStream(path+filename); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block return false; } catch (IOException e) { // TODO Auto-generated catch block return false; } 

Не забудьте удалить файл после успешного отправления сообщения.

Вот простой способ получить любой ресурс,

  Uri.parse(String.format("android.resource://%s/%s/%s",this.getPackageName(),"resource_folder_name","file_name"));