2010-12-01 3 views
0

Я пытаюсь выяснить, как сделать звуковой файл из папки Assets (входит в качестве AndroidAsset) и добавить его в список Рингтоны вы видите, когда вы делаете этот призыв:Android/MonoDroid пользовательских мелодий вопрос

this.StartActivity(new Intent(Android.Media.RingtoneManager.ActionRingtonePicker)); 

Я добавляю мелодии через этот вызов:

InputStream inputstream = Assets.Open("filename.mp3"); 

кто-нибудь знает, как это сделать? Я искал все и не понял. Спасибо

ответ

1

Что-то вроде этого:

private void setAsRingtone(){ 
     try { 
      //Open the InputStream from the Assets 
      InputStream fis = Assets.Open("filename.mp3"); 
      if (fis == null) 
       return; 

      //Open a File to save the ringtone in the SD (/sdcard/Android/data/com.your.package/) 
      File path = new 
      File(Environment.getExternalStorageDirectory().getAbsolutePath() + 
      "/Android/data/com.your.package/"); 
      if(!path.exists()) 
       path.mkdirs(); 

      //Create the proper file 
      File f = new File(path, "YourTitle" + ".mp3"); 

      //Dump the InputStream in the File 
      OutputStream fos = new FileOutputStream(f); 
      byte[] buf =new byte[1024]; 
      int len; 
      while((len=fis.read(buf))>0){ 
       fos.write(buf,0,len); 
      } 
      fos.close(); 
      fis.close(); 

      //Here are the metadata of the ringtone 
      ContentValues values = new ContentValues(); 
      values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath()); 
      values.put(MediaStore.MediaColumns.TITLE, "YourTitle"); 
      values.put(MediaStore.MediaColumns.SIZE, f.length()); 
      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
      values.put(MediaStore.Audio.Media.ARTIST, "YourArtist"); 
      //values.put(MediaStore.Audio.Media.DURATION, ""); This is not needed 
      values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
      values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
      values.put(MediaStore.Audio.Media.IS_ALARM, false); 
      values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

      //We put in the DDBB of MediaStore 
      Uri uri = 
       MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath()); 
      Uri newUri = getBaseContext().getContentResolver().insert(uri, values); 

      //Set as default 
       RingtoneManager.setActualDefaultRingtoneUri(
         getBaseContext(), 
         RingtoneManager.TYPE_RINGTONE, 
         newUri); 

     } catch (FileNotFoundException e) { 
     } catch (IOException e) { 
     } 
    }