我正在使用AlarmManager在我的android应用程序中显示警报,我想显示系统中可用的声音作为警报,但我唯一的可用性是在已设置的声音(如铃声、警报、通知)之间进行选择:

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); // OR TYPE_RINGTONE OR TYPE_NOTIFICATION
Ringtone r = RingtoneManager.getRingtone(mContext, alert);

但我想得到所有可用的系统铃声,并选择其中一个。

最佳答案

这对我有效:

Uri ringtone= RingtoneManager.getActualDefaultRingtoneUri(YourActivity.this, RingtoneManager.TYPE_ALARM);

this answer所述,您必须执行以下操作:
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone);
startActivityForResult(intent , 1);

最后,您将得到所选的音调“uri”,您可以将其存储在ringtone中,如下在onActivityResult()中所示
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case 1:
            ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
            break;
        default:
            break;
        }
    }
}

10-08 18:53