рингтон не устанавливается в некоторых устройствах, особенно в зефире 6.0 - PullRequest
0 голосов
/ 22 октября 2018

Я использую метод ниже, чтобы выбрать мелодию из каталога приложения .. работает на Oreo и нуга, но не работает ниже нуга.

 private void setRingtone(String filePath) {
    File k = new File(filePath);
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, "");
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.Audio.Media.ARTIST, " ");
    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());
    itemView.getContext().getContentResolver().delete(uri,
    MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);

    try {
          Uri pathd = Uri.parse(filePath);
         // The line below will set it as a default ring tone replace
         // RingtoneManager.TYPE_RINGTONE with 
         RingtoneManager.TYPE_NOTIFICATION
         // to set it as a notification tone
         RingtoneManager.setActualDefaultRingtoneUri(
                 itemView.getContext(), RingtoneManager.TYPE_RINGTONE,pathd);
      }
       catch (Exception e) {
           e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 22 октября 2018

Попробуйте использовать следующие форматы: Тип 1:

        Uri ringToneUri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE);
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
        mediaPlayer.setLooping(true);
        try {
            mediaPlayer.setDataSource(this, ringToneUri);
            mediaPlayer.prepare();

        } catch (IOException e) {
            e.printStackTrace();
        }
        mediaPlayer.start();

Тип 2:

mediaPlayer = new MediaPlayer ();

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
        AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.ringtone);
        if (afd == null) {
            return;
        }
        try {
            mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            afd.close();
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mediaPlayer.setLooping(true);
        mediaPlayer.start();
...