如何在 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实例,在Fragments中使用,如果您在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 中获取当前铃声?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cordova 中使用平台预装的铃声?

如何从系统声音中获取铃声

如何在Android中设置铃声+震动

如何通过我的活动在 Android 中设置铃声?

如何在我的活动中设置Android铃声?

如何在android中以编程方式将铃声添加到本机应用程序联系人