Android - Как установить песню в качестве мелодии звонка или уведомления из необработанной папки?

У меня есть список со звуками. Мне нужно, когда элемент долго нажимается es, установите его в качестве мелодии звонка или уведомления из необработанного звука моего приложения. Как я могу это сделать? Спасибо


person user3437592    schedule 27.03.2014    source источник
comment
Так ничего не решает?   -  person user3437592    schedule 29.03.2014


Ответы (2)


Ответ из моего другого поста здесь...

Установить рингтон из папки res/raw

Вы не можете установить рингтон из ресурса.

RingtoneManager.setActualDefaultRingtoneUri ожидает, что файл мелодии звонка находится на устройстве, а Uri должен быть получен от преобразователя содержимого.

    File ring = new File("pathOfYourFile");
     Uri path = MediaStore.Audio.Media.getContentUriForPath(ring.getAbsolutePath());

RingtoneManager.setActualDefaultRingtoneUri (getApplicationContext(), RingtoneManager.TYPE_RINGTONE, путь);

Также не забудьте добавить разрешение

person Community    schedule 28.03.2014

попробуйте этот код

 String name = "your_raw_audio_name";

 File file = new File(Environment.getExternalStorageDirectory(),
            "/myRingtonFolder/Audio/");
    if (!file.exists()) {
        file.mkdirs();
    }

    String path = Environment.getExternalStorageDirectory()
            .getAbsolutePath() + "/myRingtonFolder/Audio/";

    File f = new File(path + "/", name + ".mp3");

    Uri mUri = Uri.parse("android.resource://"
            + context.getPackageName() + "/raw/" + name);
    ContentResolver mCr = context.getContentResolver();
    AssetFileDescriptor soundFile;
    try {
        soundFile = mCr.openAssetFileDescriptor(mUri, "r");
    } catch (FileNotFoundException e) {
        soundFile = null;
    }

    try {
        byte[] readData = new byte[1024];
        FileInputStream fis = soundFile.createInputStream();
        FileOutputStream fos = new FileOutputStream(f);
        int i = fis.read(readData);

        while (i != -1) {
            fos.write(readData, 0, i);
            i = fis.read(readData);
        }

        fos.close();
    } catch (IOException io) {
    }
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, name);
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.MediaColumns.SIZE, f.length());
    values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
    values.put(MediaStore.Audio.Media.IS_ALARM, true);
    values.put(MediaStore.Audio.Media.IS_MUSIC, true);

    Uri uri = MediaStore.Audio.Media.getContentUriForPath(f
            .getAbsolutePath());
    Uri newUri = mCr.insert(uri, values);

    try {
        RingtoneManager.setActualDefaultRingtoneUri(context,
                RingtoneManager.TYPE_RINGTONE, newUri);
        Settings.System.putString(mCr, Settings.System.RINGTONE,
                newUri.toString());
    } catch (Throwable t) {

    }

более подробную информацию см. по этой ссылке

person wael    schedule 28.03.2014