获取手机系统铃声标题时出现的cursor为空的问题

项目中有一个功能是更改提醒的声音,这里用到了铃声这方面。本来一直好好的,今天测试提出有个手机在选择系统铃声时出现了崩溃,定位了下发现铃声的文件路径正常拿到了,但是在用cursor查询具体信息时出现了空指针的问题,当时很奇怪路径既然拿到了,为什么数据库查不到啊。直到我把路径打出来才发现问题所在,该路径是file开头的,我们在手机数据库中查询具体信息时,如果不使用content开头的url是不能识别的,正因如此,所以cursor才会为空。知道原因了,修改起来就方便了,既然它需要content的url那么我们就不url转成这样的就行了代码如下

  /**
     * file开头的uri转换为content开头的uri
     *
     * @param uri 任意uri
     * @return content开头的uri
     */
    private Uri file2Content(Uri uri) {
        if (uri.getScheme().equals("file")) {
            String path = uri.getEncodedPath();
            if (path != null) {
                path = Uri.decode(path);
                ContentResolver cr = this.getContentResolver();
                StringBuffer buff = new StringBuffer();
                buff.append("(").append(MediaStore.Audio.AudioColumns.DATA).append("=").append("'" + path + "'").append(")");
                Cursor cur =
                    cr.query(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.AudioColumns._ID },
                        buff.toString(), null, null);
                int index = 0;
                for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
                    index = cur.getColumnIndex(MediaStore.Audio.AudioColumns._ID);
                    index = cur.getInt(index);
                }
                if (index == 0) {
                    //do nothing
                } else {
                    Uri uri_temp = Uri.parse("content://media/internal/audio/media/" + index);
                    if (uri_temp != null) {
                        uri = uri_temp;
                    }
                }
            }
        }
        LogUtils.d("uri = " + uri);
        return uri;
    }

至此问题解决,问题不难,只是发生的较少,所以写篇文章记录下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值