Android:将声音另存为铃声和通知

Sel*_*t0r 5 audio notifications android ringtone

我正在从应用程序中保存声音,以用作铃声或通知声音。这是我的代码的一部分,摘自页面:

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, soundName);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.Audio.Media.ARTIST, "artist");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
this.getContentResolver().insert(uri, values);
Run Code Online (Sandbox Code Playgroud)

我的理解是,由于标记都设置为“ true”,因此将保存声音以及铃声,通知声音和警报。至少在模拟器上,它确实有效,但是在实际设备上,声音仅显示在铃声列表中,我不知道为什么。

编辑:我试图进一步调查:删除带有“ IS_RINGTONE”的行不会更改任何内容(以防一次只能使用一个标志),声音不会在通知中显示在列表中-声音。

任何帮助表示赞赏。

亲切的问候,Select0r

Sel*_*t0r 4

我尝试了解决这个问题的方法,这是我迄今为止想到的解决方案:

在模拟器上,路径并不重要,声音将出现在铃声和通知列表中。

/media/audio/ringtones在手机上,如果文件保存到OR/media/audio/但不是作为通知,声音将显示在铃声列表中。
如果我使用该路径,/media/audio/notifications声音最终会出现在通知列表中(!),但不再出现在铃声中。

所以看来我必须保存声音两次才能将其放入两个列表中?(但是为什么保存一次就可以在模拟器上工作了?)

如果还有另一种方法可以将声音放入两个列表(甚至三个列表,也有警报音,我只是懒得摆弄它们)而只保存一次,请告诉我。(现在我的解决方法是一个对话框,让用户选择是将声音保存为铃声还是通知。)