Получить URI of.mp3-файл, хранящийся в папке res / raw в android
у меня их много .mp3 файлы, хранящиеся в папке res / raw.
Я получаю Ури .mp3-файл, используя следующий код.
Uri.parse("android.resource:///com.my.android.sharesound/"+resId);
возвращает : android.resource:///com.my.android.sharesound/2130968609
Теперь я использую этот URI в создании намерения поделиться
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) появиться.
Я хочу отобразить имя файла.mp3
как я могу это сделать? Я что-то упускаю ?
или
есть ли другой способ прикрепления .mp3-файл, хранящийся в res / raw на почту через Share Intent.
6 ответов
наконец, после долгих поисков я нашел решение.
если вы хотите получить любой URI ресурса, то есть два способа:
-
Использование Имени Ресурса
синтаксис :
android.resource://[package]/[res type]/[res name]
пример :
Uri.parse("android.resource://com.my.package/drawable/icon");
-
Использование Идентификатора Ресурса
синтаксис :
android.resource://[package]/[resource_id]
пример :
Uri.parse("android.resource://com.my.package/" + R.drawable.icon);
это были примеры, чтобы получить URI любого файла изображения, хранящегося в drawable папка.
аналогично вы можете получить URIs папки res/raw.
в моем случае я использовал 1st way ie. Использование Имени Ресурса
эта работа, как по волшебству: Предполагая, что mp3 сохраняется в папке raw как
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;
}
Не забудьте удалить файл после успешной отправки электронной почты.
одна строка ответа
RingtoneManager.getRingtone(getContext(),Uri.parse("android.resource://com.my.package/" + R.raw.fileName)).play();
вот чистый способ получить любой ресурс,
Uri.parse(String.format("android.resource://%s/%s/%s",this.getPackageName(),"resource_folder_name","file_name"));
вот некоторые методы, которые могут помочь кому-то:
public Uri getRawUri(String filename) {
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/raw/" + filename);
}
public Uri getDrawableUri(String filename) {
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/drawable/" + filename);
}
public Uri getMipmapUri(String filename) {
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/mipmap/" + filename);
}
просто вызовите метод следующим образом:
Uri rawUri = getRawUri("myFile.filetype");