2011-03-23 106 views
7

我正在使用RingtoneManager,显然在一些手机上它一直都会返回null。我知道如果声音没有声音或者找不到声音,它会返回null。如果声音打开并且有声音,为什么会返回null?代码工作在我的歌Nexus S ....RingtoneManager返回null铃声

这里是我使用的是什么:

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卡上。有什么想法吗?

+0

根据RingtoneManager的源代码,getRingtone返回null的唯一情况是无法打开给定URI处的铃声。它也应该在logcat中放入''无法打开铃声'+ ringtoneUri'。你在logcat输出中看到这样的行吗? – 2011-11-10 16:19:36

+0

不是我的,但有些用户抱怨铃声不能触发。在我进行NULL检查之前,由于指针被解除引用而崩溃了。我唯一能想到的是它不能得到一个URI ......但我不知道为什么当他们有一个有效的铃声时它无法做到这一点。也许是资源锁定? – atomicbaum 2011-12-01 23:33:01

回答

8

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

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

回报null。这就解释了为什么只有一些用户发现这个问题。

+0

这个答案为我节省了几个小时。事实证明,我使用的AVD具有全面静音的所有声音设置。然后我阅读上面的答案,发现该应用在我的实际电话上工作。 – Lori 2013-10-30 18:08:07

8

如果您将存储在外部存储设备上的Costum声音复制到手机上,RingtoneManager无法将其打开,除非您的应用程序有权访问外部存储设备。

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

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

我花了一些时间来弄清楚这一点,而没有得到costum的正确的标题铃声有些用户对自己的设备

+0

非常感谢!我花了几个小时试图解决这个问题,直到我终于找到你的帖子! – qkx 2015-09-23 16:44:41

+0

非常感谢!我没花几个小时试图解决这个问题,因为我找到了你的帖子! – 2016-07-26 12:54:56