Java 如何检查uri指向的铃声是否存在?
我可以使用以下代码播放铃声Java 如何检查uri指向的铃声是否存在?,java,android,uri,ringtone,Java,Android,Uri,Ringtone,我可以使用以下代码播放铃声 rone = RingtoneManager.getRingtone(this.getContext(), Uri.parse(one)); rone.play(); 如何检查uri指向的音频文件是否存在?当用户从手机中删除文件时,我无法播放铃声,铃声会崩溃。getRingtone()如果铃声不存在,将返回null 始终检查返回值是否不为null,无论何时调用可能返回null值的方法,这都是一个很好的实践。这将防止大量的NullPointerException尝试使
rone = RingtoneManager.getRingtone(this.getContext(), Uri.parse(one));
rone.play();
如何检查uri指向的音频文件是否存在?当用户从手机中删除文件时,我无法播放铃声,铃声会崩溃。getRingtone()
如果铃声不存在,将返回null
始终检查返回值是否不为null,无论何时调用可能返回null值的方法,这都是一个很好的实践。这将防止大量的
NullPointerException
尝试使用getRingtonePosition()
方法而不是getRingtone()
:
检查rone是否为null谢谢,我可以通过检查(ringtone!=null){//do something}其他{//no ringtone,do something}来检查铃声是否存在出于某种原因,我得到了一个非null的对象,即使我在“../notifications”文件夹中删除了它的文件,而且我还得到了一个奇怪的铃声名称(一个数字)而不是原始名称。即使URI是有效的并且指向现有文件,我也得到了-1。啊,我知道为什么。在实例化
RingtoneManager
之后,您还需要这一行:rm.setType(RingtoneManager.TYPE_通知)代码>或选择应用程序正在使用的铃声类型。Ringtone manager需要知道要加载的铃声类型(对于所有类型,请使用type\u ALL
)。
final RingtoneManager rm = new RingtoneManager(preference.getContext());
final Uri loadedRingtoneUri = Uri.parse(ringtoneUriString);
final int pos = rm.getRingtonePosition(loadedRingtoneUri);
// if loaded ringtone uri is valid, use it or use default
final Ringtone ringtone = RingtoneManager.getRingtone(preference.getContext(),
(pos != -1) ? loadedRingtoneUri :
Settings.System.DEFAULT_RINGTONE_URI);