我不知道我走的路是否正确(如果不是,请更正我),我不确定如何在Android上使用MediaStore,但是我的目标是将声音存储在MediaStore中,然后使用该声音进行推送通知。我发现Android Q的文档不清楚。
在使用MediaStore时,我需要一些帮助。阅读有关Android Q的文档,我了解到我不能像以前一样(并且可以正常工作)在外部存储中存储声音,然后为推送通知通道设置声音。现在,对外部存储的访问受到限制。我知道应该对媒体文件使用MediaStore。我正在尝试在MediaStore中存储声音。
问题:
到目前为止,这是我的代码:
Param filePath是Xamarin Essentials AppData目录中文件的路径,如下所示:
/data/user/0/com.company.appname/files/customalert.wav
如果可以的话,我理想地希望在插入MediaStore之后返回文件的Uri,以便将其设置为通知频道,但如果不是这样做的话,建议不要这样做。
public Android.Net.Uri InsertCustomSoundInMediaStore(string filePath)
{
ContentValues values = new ContentValues();
ContentResolver contentResolver = CrossCurrentActivity.Current.AppContext.ContentResolver;
var appName = AppInfo.Name;
values.Put(MediaStore.MediaColumns.Title, "customalert");
values.Put(MediaStore.MediaColumns.MimeType, "audio/wav");
values.Put(MediaStore.MediaColumns.Size, GetDuration(filePath));
values.Put(MediaStore.Audio.Media.InterfaceConsts.Artist, appName);
values.Put(MediaStore.Audio.Media.InterfaceConsts.IsRingtone, true);
values.Put(MediaStore.Audio.Media.InterfaceConsts.IsNotification, true);
values.Put(MediaStore.Audio.Media.InterfaceConsts.IsAlarm, true);
values.Put(MediaStore.Audio.Media.InterfaceConsts.IsMusic, false);
Android.Net.Uri newUri = contentResolver.Insert(MediaStore.Audio.Media.ExternalContentUri, values);
try
{
// copy file from cache to OS (MediaStore)?
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return newUri;
}