Android/MonoDroid custom Ringtones question
-
29-09-2019 - |
Question
I am trying to figure out how to take an audio file from the Assets folder (included as an AndroidAsset) and add it to the list of Ringtones you see when you make this call:
this.StartActivity(new Intent(Android.Media.RingtoneManager.ActionRingtonePicker));
I am adding the ringtone via this call:
InputStream inputstream = Assets.Open("filename.mp3");
Does anyone know how this is accomplished? I have been searching all over and haven’t figured it out. Thank you
Solution
Something like this:
private void setAsRingtone(){
try {
//Open the InputStream from the Assets
InputStream fis = Assets.Open("filename.mp3");
if (fis == null)
return;
//Open a File to save the ringtone in the SD (/sdcard/Android/data/com.your.package/)
File path = new
File(Environment.getExternalStorageDirectory().getAbsolutePath() +
"/Android/data/com.your.package/");
if(!path.exists())
path.mkdirs();
//Create the proper file
File f = new File(path, "YourTitle" + ".mp3");
//Dump the InputStream in the File
OutputStream fos = new FileOutputStream(f);
byte[] buf =new byte[1024];
int len;
while((len=fis.read(buf))>0){
fos.write(buf,0,len);
}
fos.close();
fis.close();
//Here are the metadata of the ringtone
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "YourTitle");
values.put(MediaStore.MediaColumns.SIZE, f.length());
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "YourArtist");
//values.put(MediaStore.Audio.Media.DURATION, ""); This is not needed
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
//We put in the DDBB of MediaStore
Uri uri =
MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath());
Uri newUri = getBaseContext().getContentResolver().insert(uri, values);
//Set as default
RingtoneManager.setActualDefaultRingtoneUri(
getBaseContext(),
RingtoneManager.TYPE_RINGTONE,
newUri);
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow