2016-05-16 4 views
0

私はXamarinフォームを使用しており、Dependency Serviceを使用してmp3の場所からアセットフォルダに着信音を設定しています。ここに私のコードは次のとおりです。Xamarin Android - アセットフォルダ内の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(ファイル名、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で

答えて

0

Stream.CopyToを手動で実装しています。ちょうどそれを使用します。

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