android – 如何检查Uri指向的资源是否可用?

android – 如何检查Uri指向的资源是否可用?,第1张

概述我有Uri指出的资源(音乐文件).在尝试使用MediaPlayer播放之前,如何查看是否可用? 它的Uri存储在数据库中,所以当文件被删除或卸载的外部存储器时,我只是在调用MediaPlayer.prepare()时收到异常. 在上述情况下,我想播放系统默认的铃声.我当然可以做到这一点,我抓住以上例外,但也许有一些更优雅的解决方案? 编辑: 我忘了提到音乐文件Uri实际上是通过使用铃声优先购买的. 我有Uri指出的资源(音乐文件).在尝试使用MediaPlayer播放之前,如何查看是否可用?

它的Uri存储在数据库中,所以当文件被删除或卸载的外部存储器时,我只是在调用MediaPlayer.prepare()时收到异常.

在上述情况下,我想播放系统默认的铃声.我当然可以做到这一点,我抓住以上例外,但也许有一些更优雅的解决方案?

编辑:
我忘了提到音乐文件Uri实际上是通过使用铃声优先购买的.这意味着我可以让Uri指向内部存储,外部存储或默认系统铃声的铃声.

Uri的例子是:

>内容://设置/系统/铃声 – 用于选择默认铃声
> content:// media / internal / audio / media / 60 – 用于内部存储上的铃声
> content:// media / external / audio / media / 192 – 用于外接存储器上的铃声

我很高兴提出“新的file(路径).exists()方法,因为它救了我从提到的异常,但一段时间后,我注意到它为所有的铃声选项返回false
任何其他想法?

解决方法 提出的方法不起作用的原因是因为您使用ContentProvIDer URI而不是实际的文件路径.要获取实际的文件路径,您必须使用游标来获取文件.

假设String contentUri等于内容URI,如content:// media / external / audio / media / 192

ContentResolver cr = getContentResolver();String[] projection = {MediaStore.MediaColumns.DATA}Cursor cur = cr.query(Uri.parse(contentUri),projection,null,null);if (cur != null) {  if (cur.movetoFirst()) {    String filePath = cur.getString(0);    if (new file(filePath).exists()) {      // do something if it exists    } else {      // file was not found    }  } else {     // Uri was ok but no entry found.   }  cur.close();} else {  // content Uri was invalID or some other error occurred }

我没有使用这种方法与声音文件或内部存储,但它应该工作.该查询应该将单个行直接返回到您的文件.

总结

以上是内存溢出为你收集整理的android – 如何检查Uri指向的资源是否可用?全部内容,希望文章能够帮你解决android – 如何检查Uri指向的资源是否可用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131444.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存