【问题标题】:RingtoneManager returning null ringtoneRingtoneManager 返回空铃声
【发布时间】:2011-03-23 22:54:52
【问题描述】:

我正在使用 RingtoneManager,显然在某些手机上它总是返回 null。我知道如果声音无声或找不到音调,它会返回 null。如果声音打开并且有音调,为什么会返回null?该代码适用于我的 nexus s....

这是我正在使用的:

Ringtone ringtone;
ringtone = RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
if(ringtone == null)
{
    Log.d("Debug", "ringtone is null");
}
else
{
    ringtone.play();
}

我已启用播放铃声的所有权限(它适用于我的手机),甚至启用了 SD 卡权限,以防铃声在 SD 卡上。有什么想法吗?

【问题讨论】:

  • 根据 RingtoneManager 的源代码,getRingtone 返回 null 的唯一情况是给定 URI 处的铃声无法打开时。它还应该在 logcat 中添加一行 "Failed to open ringtone " + ringtoneUri。您是否在 logcat 输出中看到这样的行?
  • 不是我的,但有些用户抱怨铃声不响。在我进行 NULL 检查之前,它因为取消引用的指针而崩溃。我可以假设的唯一想法是它无法获取 URI ......但我不知道为什么当他们有一个有效的铃声时它不能做到这一点。也许是资源锁?

标签: java android ringtone


【解决方案1】:

我只是陷入了问题所在。如果用户有类似“静音”的通知声音功能:

RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

返回null。这就解释了为什么只有部分用户会发现这个问题。

【讨论】:

  • 这个答案为我节省了几个小时。事实证明,我使用的 AVD 将所有声音设置全部设为静音。然后我阅读了上面的答案,发现该应用程序可以在我的实际手机上运行。
【解决方案2】:

如果您将一个角色声音复制到存储在外部存储上的手机上,RingtoneManager 将无法打开它,除非您的应用具有访问外部存储的权限。

向您的清单文件添加缺少的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我花了一些时间才弄清楚这一点,但没有得到一些用户在他们的设备上拥有的服装铃声的正确标题

【讨论】:

  • 非常感谢!!!我花了几个小时试图解决这个问题,直到我终于找到了你的帖子!
  • 非常感谢!我没有花几个小时试图解决这个问题,因为我找到了你的帖子!
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多