需要用 xamarin 更改默认铃声

need to change default ringtone with xamarin

需要用 xamarin 更改默认铃声 我使用带有路径字符串的 android.net.parse 和 return null,然后我使用我在网上找到的波纹管代码,然后再次使用 return null 有人可以帮忙吗?

var ring1 = ("file:////storage/emulated/0/Ringtones/" + item.ringtone);
     ContentValues values = new ContentValues();
                            
                            values.Put(MediaStore.IMediaColumns.Data, ring1);
                            values.Put(MediaStore.Audio.Media.InterfaceConsts.IsRingtone, true);
                            values.Put(MediaStore.IMediaColumns.MimeType, "audio/mp3");
                            
    
    
                            var uri = MediaStore.Audio.Media.GetContentUriForPath(path: ring1);
                            
    
                            Android.Net.Uri newUri = this.ContentResolver.Insert(uri, values);
    
    RingtoneManager.SetActualDefaultRingtoneUri(Android.App.Application.Context,RingtoneType.Ringtone, newUri);

调试中的“uri”和“values”有值但参数newUri为空

您需要重新检查ring1的路径。

我使用下载文件夹中的文件作为参考。有效。

 var ring1 = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads, "sample.mp3");

如果您想使用铃声的默认Uri,您可以使用下面的代码。

  RingtoneManager.GetDefaultUri(RingtoneType.Ringtone)

问题出在写入权限我使用下面的代码检查文件是否存在请求权限并更改铃声和工作

var newuri3 = Android.Net.Uri.Parse("file:///storage/emulated/0/Ringtones/" + item.ringtone);
                       
                        var newuri = newuri3;
                        bool b = false;
                        if (null != newuri)
                        {
                            try
                            {
                                var inputStream = Android.App.Application.Context.ContentResolver.OpenInputStream(newuri);
                                inputStream.Close();
                                Console.WriteLine("file exist");
                                b = true;
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("File corresponding to the uri does not exist " + newuri.ToString());
                            }
                        }

                        var bi = Settings.System.CanWrite(Android.App.Application.Context);
                        if (bi)
                        {
                            Console.WriteLine("it haw write permision");
                        }
                        else
                        {
                            Console.WriteLine("doenst have permision");
                            
                            

                            Intent intent = new Intent(Settings.ActionManageWriteSettings);
                            intent.SetData(Android.Net.Uri.Parse($"package:{Android.App.Application.Context.PackageName}"));
                            intent.AddFlags(ActivityFlags.NewTask);
                            Android.App.Application.Context.StartActivity(intent);

                        }

                      

                        RingtoneManager.SetActualDefaultRingtoneUri(Android.App.Application.Context, RingtoneType.Ringtone, newuri);

其中 item.ringtone 是文件名,例如 music.mp3