Почему мой newUri из ContentValues ​​является нулевым?Установка мелодии звонка программно - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь установить песню в качестве мелодии звонка. Я нашел много способов сделать это, но ничего не работает. Один из этих способов выглядит следующим образом:

 private void setSongAsRingtone(Song song){
        File ringFile = new File(song.getPath());

        Log.d(tag, "Ring name: " + ringFile.getName());
        Log.d(tag, "Ring absolute path: " + ringFile.getAbsolutePath());
        Log.d(tag, "Activity: " + getActivity().toString());

        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, ringFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, song.getTitle());
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
        values.put(MediaStore.MediaColumns.SIZE, 26454);
        values.put(MediaStore.Audio.Media.ARTIST, song.getArtist());
        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, false);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringFile.getAbsolutePath());
        Uri newUri = getActivity().getContentResolver().insert(uri, values);
        RingtoneManager.setActualDefaultRingtoneUri(getActivity(), RingtoneManager.TYPE_RINGTONE, newUri);
    }

Logcat говорит:

D/RingtoneDialogFragment: Ring name: Jamal - Peron [Official Music Video].m4a
D/RingtoneDialogFragment: Ring absolute path: /storage/emulated/0/storage/emulated/0/Download/Jamal - Peron [Official Music Video].m4a
D/RingtoneDialogFragment: Activity: com.linkplayer.linkplayer.main.MainActivity@7bc8453
I/RingtoneManager: Save cache type :1, URI : content://0@media/external/audio/media/10557
W/RingtoneManager: Failed to open directly; attempting failover: java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
W/RingtoneManager: Failed to cache ringtone: java.io.IOException: java.lang.SecurityException: Uri is not ringtone, alarm, or notification: content://0@media/external/audio/media/10557
I/RingtoneManager: ringtone title : Jamal - Peron [Official Music Video], DRM : 0

Но объект newUri имеет значение null , и у меня некоторые ошибки .Может быть, у кого-то есть идея, почему?

Заранее спасибо за помощь.Хорошего вечера.

1 Ответ

0 голосов
/ 21 декабря 2018

Мне пришлось вызвать этот метод перед вставкой (созданием newUri):

String filePathToDelete = MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"";
getActivity().getContentResolver().delete(uri, filePathToDelete, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...