Установка аудиофайла в качестве мелодии звонка
У меня есть файл сохранения в папке sdcard/media/audio/ringtone
. Этот файл появится в списке выбора мелодии звонка от settings/sound/phone
Ringtone.
Но я хочу установить этот файл в качестве мелодии звонка из моего кода.
Вот мой код.
File k = new File(path, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "TwiAppclip");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
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);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k
.getAbsolutePath());
Uri newUri = getApplicationContext().getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(),
RingtoneManager.TYPE_RINGTONE, newUri);
here uri
Я получаю Но я получил newUri = null
. Я думаю, почему он не устанавливает в качестве мелодии звонка.
Кто-нибудь знает, где проблема? как мне получить newUri
правильно?
Ответы
Ответ 1
Аудио устанавливается как мелодия звонка только один раз, но решение этой проблемы - если вы пытаетесь снова запустить тот же код, вы будете вставлять дублируемую запись в таблицу MediaStore, но база данных SQLite не позволит вам, Вы должны либо переименовать свой файл, либо добавить другой экземпляр, либо войти, удалить запись, а затем повторить попытку. Поэтому я удалял эту запись каждый раз, а затем вставлял ее снова.
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
Uri newUri = getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(activity.this,
RingtoneManager.TYPE_RINGTONE, newUri);
Ответ 2
Вместо удаления ранее вставленного uri вы можете его повторно использовать:
// check if file already exists in MediaStore
String[] projection = {MediaStore.Audio.Media._ID};
String selectionClause = MediaStore.Audio.Media.DATA + " = ? ";
String[] selectionArgs = {ringtoneFile.getAbsolutePath()};
Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selectionClause, selectionArgs, null);
Uri insertedUri;
if (cursor == null || cursor.getCount() < 1) {
// not exist, insert into MediaStore
ContentValues cv = new ContentValues();
cv.put(MediaStore.Audio.Media.DATA, ringtoneFile.getAbsolutePath());
cv.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName());
insertedUri = context.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cv);
} else {
// already exist
cursor.moveToNext();
long id = cursor.getLong(0);
insertedUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
}
RingtoneManager.setActualDefaultRingtoneUri(context, type, insertedUri);
Ответ 3
RingtoneManager.setActualDefaultRingtoneUri(
Context,
RingtoneManager.TYPE_RINGTONE,
Uri
.parse("Media file uri"));
Я думаю, что это решит проблему ур.