如何在 Android 中获取当前铃声?
Posted
技术标签:
【中文标题】如何在 Android 中获取当前铃声?【英文标题】:How to get current ringtone in Android? 【发布时间】:2014-04-25 12:57:52 【问题描述】:我找到了很多如何获取默认铃声的示例。类似的东西:
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(), alert);
ringtone.setStreamType(AudioManager.STREAM_RING);
ringtone.play();
但我想获取用户设置的实际当前铃声。
【问题讨论】:
【参考方案1】:我也在为这个问题苦苦挣扎,所以解决方案是:
Uri defaultRingtoneUri = RingtoneManager.getActualDefaultRingtoneUri(getActivity().getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
Ringtone defaultRingtone = RingtoneManager.getRingtone(getActivity(), defaultRingtoneUri);
【讨论】:
getActivity()
是什么?
当前Activity
实例,在Fragment
s中使用,如果您在Activity
中,请改用YourActivity.this
。【参考方案2】:
这是 dgabor 答案的扩展。
只需添加defaultRingtone.play();
即可播放铃声。
Uri defaultRintoneUri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
Ringtone defaultRingtone = RingtoneManager.getRingtone(getApplicationContext(), defaultRintoneUri);
defaultRingtone.play();
【讨论】:
【参考方案3】:我也搜索了很多你的问题,我也有。 终于从这个本身得到了解决方案。
在按钮中使用以下代码来获取铃声意图。
public void pickRingtone(View view)
// TODO Auto-generated method.stub
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone");
// for existing ringtone
Uri urie = RingtoneManager.getActualDefaultRingtoneUri(
getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie);
startActivityForResult(intent, 5);
【讨论】:
这仍然没有回答我的问题。我只是想为当前选择的铃声(由用户)获取一个 URI。我不需要任何铃声选择器或类似的东西。我只需要获取一个 uri 并在需要时播放它。【参考方案4】:这是解决方案。
内部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
,因为模拟器中没有铃声,所以在手机中执行此操作
【讨论】:
谢谢!所以我假设数据是 Intent.. 因为我试图在 BroadcastReceiver 的 onReceive 方法中执行它,该方法包含 Context 和 Intent 作为传递的参数.. 今天晚些时候会尝试。再次感谢。 试图让它在 Activity 类或 BroadcastReceiver 中工作但没有成功。 r.getTitle(this) 返回“未知铃声”,如果尝试播放铃声,它会崩溃。 如果也尝试过,但如果我返回我的活动,我会收到错误并且应用程序会中断。那我做错了什么?【参考方案5】:尝试:
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI);
【讨论】:
这行不通,因为 RingtoneManager.getDefaultUri 只接受 INT 参数,而 RingtoneManager.EXTRA_RINGTONE_EXISTING_URI 是一个字符串。【参考方案6】:试试这个:
uri default_ringtone_uri = Settings.System.DeFAULT_RINGTONE_URI
Ringtone ringtone = RingtoneManager.getRingtone(context, uri).play();
【讨论】:
虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。【参考方案7】:Alexander The Great
的回答是正确的。但是,我简化了它。
Uri currentRingtonUri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
【讨论】:
以上是关于如何在 Android 中获取当前铃声?的主要内容,如果未能解决你的问题,请参考以下文章