我正在尝试从我的应用程序中保存到SD卡的音频文件设置铃声,经过阅读所有相关帖子后,我相信我已经接近成功了,只是没有正确定义URI。
File ringPath = new File(path, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, ringPath.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "temptitle");
values.put(MediaStore.MediaColumns.SIZE, ringPath.length());
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.Audio.Media.ARTIST, "tempartist");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
uri = Uri.fromFile(ringPath);
RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, uri);
通常,URI 的定义更像是:
Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringPath.getAbsolutePath());
Uri newUri = main.getContentResolver().insert(uri, values);
但是我并不是很明白这一切的意义,而且它给了我相当令人讨厌的错误(虽然它们可能比我的当前错误更糟糕)。我确定这是必须要这样做的方式,但我的代码中的URI实际上返回了正确的路径(另一个没有返回正确路径,可能是由于我的误用),所以我不明白为什么它不能工作。虽然说实话,我并不明白为什么必须使用URI来完成这项任务,而不是指定路径。
如果有人能够给我一点解释,或者链接我到某个地方去,让我真正理解这个问题,并解决这个问题,我会非常感激。