我正在尝试从我的应用程序中保存到 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 的意义,而不是指定路径。
如果有人可以给我一点解释,或者在某个地方链接我,那么我可以真正理解这一点并解决这个问题,我将非常感激。