Xamarin.Android 10 Q如何从MediaStore复制/访问自定义声音

时间:2019-10-13 18:14:59

标签: android xamarin mediastore

我不知道我走的路是否正确(如果不是,请更正我),我不确定如何在Android上使用MediaStore,但是我的目标是将声音存储在MediaStore中,然后使用该声音进行推送通知。我发现Android Q的文档不清楚。

在使用MediaStore时,我需要一些帮助。阅读有关Android Q的文档,我了解到我不能像以前一样(并且可以正常工作)在外部存储中存储声音,然后为推送通知通道设置声音。现在,对外部存储的访问受到限制。我知道应该对媒体文件使用MediaStore。我正在尝试在MediaStore中存储声音。

问题:

  1. 如何将声音复制到媒体存储中,因为我的方法 下面是不完整的。
  2. 如何从媒体存储中检索/访问声音,以便 将其设置为推送通知频道的默认声音。 访问仍然是通过Uri或其他方式完成的?
  3. 如何设置我复制到媒体商店的wav声音作为 推送通知频道的默认声音?

到目前为止,这是我的代码:

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;
        }

0 个答案:

没有答案