Как установить музыкальные файлы, которых нет в Media Store, в качестве мелодии звонкаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как установить музыкальные файлы, которых нет в Media Store, в качестве мелодии звонка

Сообщение Anonymous »

До уровня Jelly Bean 18 я могу использовать музыкальные файлы, которых нет в Медиа-магазине (например, частный .mp3-файл в папке содержит файл .nomedia, поэтому Media Scanner не сканирует эту папку и не знает об этом файле), но с Android 4.3 (проверено на Nexus 4) я не могу этого сделать, это работает только для музыкальных файлов, которые уже сканированы Media Scanner.

Настоящая причина этой проблемы в том, что я не могу вставить ContentValues с помощью MediaColumns. DATA — это абсолютный путь к файлу, не сканируемому Media Scanner, метод вставки всегда возвращает ноль.

Uri newUri = getCR().insert(uri, contentValues); // returns null in Android 4.3


Есть ли у кого-нибудь способ использовать личный файл (не сканируемый и не распознаваемый Media Scanner) в качестве мелодии звонка?

Вот как я устанавливаю мелодию звонка:

File ringtoneFile = new File(audio.getPath());

ContentValues cv = new ContentValues();
cv.put(MediaColumns.DATA, ringtoneFile.getAbsolutePath());
cv.put(MediaColumns.TITLE, audio.getTitle());

cv.put(MediaColumns.MIME_TYPE, "audio/*");
if (audio.getArtist() != null)
cv.put(Media.ARTIST, audio.getArtist());

cv.put(Media.IS_RINGTONE, true);
cv.put(Media.IS_NOTIFICATION, false);
cv.put(Media.IS_ALARM, false);
cv.put(Media.IS_MUSIC, false);

Uri uri = Media.getContentUriForPath(ringtoneFile.getAbsolutePath());
Uri newUri = getCR().insert(uri, cv); ////return null in Android 4.3
if (newUri == null)
{
Cursor c = getCR().query(uri, new String[] { Media._ID }, Media.DATA + "=?",
new String[] { ringtoneFile.getAbsolutePath() }, null);
long id = -1;
if (c != null && c.moveToFirst())
{
id = c.getLong(c.getColumnIndex(Media._ID));
newUri = Uri.parse(uri.toString() + "/" + id);
c.close();
}
}

if (newUri != null)
{
RingtoneManager.setActualDefaultRingtoneUri(getAppContext(), RingtoneManager.TYPE_RINGTONE, newUri);
}


Подробнее здесь: https://stackoverflow.com/questions/184 ... s-ringtone
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»