Android 如何临时覆盖系统默认铃声?

Android 如何临时覆盖系统默认铃声?,android,ringtone,Android,Ringtone,我正在编写一个应用程序,该应用程序具有以下功能:在用户打开应用程序时,使用另一个自定义铃声临时覆盖系统默认铃声,并在用户关闭应用程序时恢复为默认铃声。同时,用户可以在“设置”或其他应用程序中更改默认铃声,但只要我的应用程序正在运行,这些更改在用户关闭我的应用程序之前都不会生效 我不能这样做 RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, toneUri); 因为这意味着改变铃声本身

我正在编写一个应用程序,该应用程序具有以下功能:在用户打开应用程序时,使用另一个自定义铃声临时覆盖系统默认铃声,并在用户关闭应用程序时恢复为默认铃声。同时,用户可以在“设置”或其他应用程序中更改默认铃声,但只要我的应用程序正在运行,这些更改在用户关闭我的应用程序之前都不会生效

我不能这样做

RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, toneUri);
因为这意味着改变铃声本身,而不是用另一个铃声覆盖它。当然,我可以在应用程序打开时记住系统铃声,并在关闭时将其更改回该铃声。但是,使用这种方法,当我的应用关闭时,用户在更改系统铃声时所做的任何更改(当我的应用仍在运行时)都将被丢弃,因为它将自动恢复到以前记住的铃声。将使我的自定义铃声立即不再有效


否则怎么做呢?

我认为你记住“旧”铃声并在应用程序完成后恢复它是正确的。如上所述,问题在于当用户在应用程序运行时更改铃声时会发生什么

有几种方法可以避免这种情况:

  • 收听正在更改的铃声的系统广播,并通过重新应用铃声做出相应响应。我对此进行了调查——不幸的是,没有这样的广播存在,所以这是一个没有意义的观点
  • 使用闹钟定期检查铃声,看看它是否是您设置的铃声-如果不是,他们已经更改了铃声,因此您可以将其更改回原来的铃声
  • 与更新问题无关:在您恢复铃声之前,检查当前设置是什么-如果它与您设置的设置不同,那么您知道它是在您的应用程序打开时更改的
在最后一种情况下,您应该能够根据应用程序的功能处理更改


不过,您的更新引发了另一个问题:您确定用户希望您强制覆盖他们的铃声,即使他们更改了铃声?如果是,那没关系,但这是你需要记住的。

对不起,我错了:不是我的应用程序无法保留新铃声,而是我的自定义铃声立即不再有效。请看我编辑的问题。