문제

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

도움이 되었습니까?

해결책

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) {
        }
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top