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

标签 android ringtone

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

我不能这样做

RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, toneUri);

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

否则怎么办呢?

最佳答案

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

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

  • 收听正在更改的铃声的系统广播,并通过重新应用您的铃声做出相应响应。我调查了这个 - 不幸的是,不存在这样的广播,所以这是一个有争议的问题。
  • 使用闹钟定期检查铃声,看看它是否是您设置的 - 如果不是,他们已经更改了,因此您可以将其更改回来。
  • 与更新的问题无关:就在恢复铃声之前,检查当前设置是什么 - 如果它与您设置的不同,那么您知道它在您的应用程序打开时被更改了。

在最后一种情况下,您应该能够根据您应用的功能处理更改。

您的更新提出了另一个问题:您确定用户希望您强行覆盖他们的铃声,即使他们更改了铃声吗?如果您是,那很好,但您需要牢记这一点。

关于android - 如何临时覆盖系统默认铃声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112388/

相关文章:

android - 尝试从其他应用安装 APK 时如何使用默认包安装程序(Android)?

java - 如何检查uri指向的铃声是否存在?

iphone - iOS 应用程序如何提供铃声?

c# - 下载 mp3 并另存为铃声

android - InterlockedCompareExchange Android 崩溃问题

java - 如何从 Google 应用引擎中的 key 返回自动生成的数字 ID?

java - 套接字关闭错误

android - 移动样式表 - 仅在刷新时加载?

android - 创建的铃声文件没有任何声音