Я не знаю, нахожусь ли я на правильном пути (пожалуйста, исправьте меня, если я нет), и я не уверен, как использовать MediaStore на Android, но моя цель - сохранить звук в MediaStore, а затем использовать этот звук для pushуведомления. Я не нахожу документацию для Android Q.
Мне нужна помощь при использовании MediaStore. Читая документацию для Android, я понимаю, что не могу просто сохранить звук во внешнем хранилище, как раньше (и это сработало), а затем установить этот звук для своего канала push-уведомлений. Теперь доступ к внешнему хранилищу ограничен. Я понимаю, что следует использовать MediaStore вместо медиа-файлов. Я пытаюсь сохранить звук в MediaStore.
Вопросы:
- Как скопировать звук в хранилище мультимедиа, поскольку мой метод, приведенный ниже, не завершен.
- Как получить / получить доступ к этому звуку из хранилища данных, чтобы установить его в качестве звука по умолчанию для канала push-уведомлений. Доступ по-прежнему осуществляется через Uri или другим способом?
- Как настроитьэтот wav-звук, который я скопировал в Media Store в качестве звука по умолчанию для моего канала push-уведомлений?
Пока это мой код:
Param filePath - это путь к файлу вкаталог AppData Xamarin Essentials и выглядит следующим образом:
/ data / user / 0 / com.company.appname / files / customalert.wav
В идеале я хочу вернутьсяUri файла после вставки в MediaStore, если это возможно, чтобы установить его для канала уведомлений, но предложить другое, если это не способ сделать это.
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;
}