Как получить текущую мелодию в Android?

Я нашел много примеров, как получить мелодию по умолчанию. Что-то вроде того:

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(),  alert);
         ringtone.setStreamType(AudioManager.STREAM_RING);
         ringtone.play();

Но я хочу получить актуальную мелодию звонка, которую установил пользователь.

Ответы на вопрос(5)

uri default_ringtone_uri = Settings.System.DeFAULT_RINGTONE_URI

Ringtone ringtone = RingtoneManager.getRingtone(context, uri).play();
 rollstuhlfahrer25 мар. 2018 г., 11:30
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI);
 chabislav19 мар. 2014 г., 21:15
Это не будет работать, потому что RingtoneManager.getDefaultUri принимает только параметр INT, тогда как RingtoneManager.EXTRA_RINGTONE_EXISTING_URI является строкой.
Решение Вопроса

Uri defaultRingtoneUri = RingtoneManager.getActualDefaultRingtoneUri(getActivity().getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
Ringtone defaultRingtone = RingtoneManager.getRingtone(getActivity(), defaultRingtoneUri);
 Phil Roggenbuck14 июн. 2018 г., 20:06
что такоеgetActivity() ?
 jackz31411 янв. 2019 г., 03:49
Электрический токActivity экземпляр, который используется вFragmentс, если вы находитесь вActivityиспользоватьYourActivity.this вместо.

Это продолжение ответа дгабора. Просто добавьdefaultRingtone.play(); играть рингтон.

Uri defaultRintoneUri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
Ringtone defaultRingtone = RingtoneManager.getRingtone(getApplicationContext(), defaultRintoneUri);
defaultRingtone.play();

внутриonActivityResult:

Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);  
Ringtone r=RingtoneManager.getRingtone(this, uri); 
String ringToneName=r.getTitle(this);
Toast.makeText(getApplicationContext(), "Ringtone Name : "+ringToneName,Toast.LENGTH_SHORT).show();

Но это покажетexception в эмуляторе, потому что в эмуляторе нет мелодии, поэтому выполните это в мобильном телефоне

 Lukas Hieronimus Adler15 мар. 2018 г., 17:36
Если попытался это сделать, но если я вернусь к своей деятельности, я получаю сообщение об ошибке, и приложение разрывается. так что я делаю не так?
 chabislav19 мар. 2014 г., 21:23
Спасибо! Поэтому я предполагаю, что данные являются Intent. Потому что я пытаюсь сделать это внутри метода onReceive BroadcastReceiver, который содержит Context и Intent в качестве переданных параметров. Попробую это позже сегодня. Еще раз спасибо.
 chabislav20 мар. 2014 г., 22:05
Пытался заставить его работать в классе Activity или BroadcastReceiver, но безуспешно. r.getTitle (this) возвращает «неизвестный рингтон», и если попытаться воспроизвести рингтон, он вылетает.

Ваш ответ на вопрос