【问题标题】:Xamarin Android - Setting ringtone from mp3 in asset folderXamarin Android - 从资产文件夹中的 mp3 设置铃声
【发布时间】:2016-05-16 19:15:05
【问题描述】:

我正在使用 Xamarin 表单并使用依赖服务从资产文件夹中的 mp3 位置设置铃声。这是我的代码:

AssetManager assets = Forms.Context.Assets;
    fileName = "Artist.mp3";
    System.IO.Stream inputStream;
    System.IO.Stream outputStream;
    try
    {
        inputStream = assets.Open("Sounds/" + fileName);

      **_  outputStream = Forms.Context.OpenFileOutput(fileName, FileCreationMode.Private); _**

        byte[] buffer = new byte[65536 * 2];
        int read;
        while ((read = inputStream.Read(buffer, 0, (int)inputStream.Length)) != -1)
        {
            outputStream.Write(buffer, 0, read);
        }
        inputStream.Close();
        inputStream = null;
        outputStream.Flush();
        outputStream.Close();
        outputStream = null;

        Java.IO.File newSoundFile = new Java.IO.File(basepath + "/Sounds/" + fileName);

        if (newSoundFile.Exists())
        {

            ContentValues values = new ContentValues();
            values.Put(MediaStore.MediaColumns.Data, newSoundFile.AbsolutePath);
            values.Put(MediaStore.MediaColumns.Title, "Test Ringtone");
            values.Put(MediaStore.MediaColumns.MimeType, "audio/*");
            values.Put(MediaStore.MediaColumns.Size, newSoundFile.Length());
            values.Put(MediaStore.Audio.Media.InterfaceConsts.Artist, "Artist MP3");
            values.Put(MediaStore.Audio.Media.InterfaceConsts.Duration, 2300);
            values.Put(MediaStore.Audio.Media.InterfaceConsts.IsRingtone, true);
            values.Put(MediaStore.Audio.Media.InterfaceConsts.IsNotification, false);
            values.Put(MediaStore.Audio.Media.InterfaceConsts.IsAlarm, false);
            values.Put(MediaStore.Audio.Media.InterfaceConsts.IsMusic, false);

            Android.Net.Uri uri = MediaStore.Audio.Media.GetContentUriForPath(newSoundFile.AbsolutePath);
            Forms.Context.ContentResolver.Delete(uri, MediaStore.MediaColumns.Data + "=\"" + newSoundFile.AbsolutePath + "\"", null);
            Android.Net.Uri newUri = Forms.Context.ContentResolver.Insert(uri, values);

            try
            {
                RingtoneManager.SetActualDefaultRingtoneUri(Forms.Context, RingtoneType.Ringtone, newUri);
            }
            catch (Exception e)
            {
            }
        }
    }
    catch (Exception e)
    {
    }

我在 outputStream = Forms.Context.OpenFileOutput(fileName, FileCreationMode.Private) 行中遇到异常

System.NotSupportedException:不支持指定的方法。 在 Android.Runtime.InputStreamInvoker.get_Length () [0x00000] 在 /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/InputStreamInvoker.cs:55

【问题讨论】:

    标签: android xamarin xamarin.android xamarin.forms


    【解决方案1】:

    您正在手动实施Stream.CopyTo。随便用吧。

    using (var inputStream = assets.Open("Sounds/" + fileName))
    using (var outputStream = Forms.Context.OpenFileOutput(fileName, FileCreationMode.Private))
    {
        inputStream.CopyTo(outputStream);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多