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

Was it helpful?

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
scroll top