2012-08-05 101 views
4

好吧,我嘗試了一些方法,並沒有工作還沒有。更「正確」的方式是(我認爲),我真的需要幫助,我會瘋了! :)設置使用從res /原始文件夾的MP3鈴聲

public void setRingtone(){ 
     String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     String fileName = nombreActual+".mp3"; 

     File newSoundFile = new File(baseDir, fileName); 
     Uri mUri = Uri.parse("android.resource://com.genaut.ringtonelists/raw/"+sonidoActual);//sonidoActual (sound name without .mp3) 
     ContentResolver mCr = getContentResolver(); 
     AssetFileDescriptor soundFile; 
     try { 
      soundFile= mCr.openAssetFileDescriptor(mUri, "r"); 
     } catch (FileNotFoundException e) { 
      soundFile=null; 
     } 

     try { 
      byte[] readData = new byte[1024]; 
      FileInputStream fis = soundFile.createInputStream(); 
      FileOutputStream fos = new FileOutputStream(newSoundFile); 
      int i = fis.read(readData); 

      while (i != -1) { 
       fos.write(readData, 0, i); 
       i = fis.read(readData); 
      } 

      fos.close(); 
     } catch (IOException io) { 
     } 

     ContentValues values = new ContentValues(); 
      values.put(MediaStore.MediaColumns.DATA, newSoundFile.getAbsolutePath()); 
      values.put(MediaStore.MediaColumns.TITLE, nombreActual); 
      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
      values.put(MediaStore.MediaColumns.SIZE, newSoundFile.length()); 
      values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name); 
      values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
      values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
      values.put(MediaStore.Audio.Media.IS_ALARM, true); 
      values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

      Uri uri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile.getAbsolutePath()); 
      Uri newUri = mCr.insert(uri, values); 

      RingtoneManager.setActualDefaultRingtoneUri(Main.this, RingtoneManager.TYPE_RINGTONE, newUri); 

    Log.d("AbsolutePath: ", newSoundFile.getAbsolutePath()); 
    Log.d("DefaultUri: ", RingtoneManager.getActualDefaultRingtoneUri(Main.this, RingtoneManager.TYPE_RINGTONE).toString()); 
    } 

我對這個清單的權限:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我嘗試了一些代碼,嘗試混合一些步驟(複製該文件,並設置庫..),但沒有作品。我真的很喜歡這個。使用此代碼,我可以將我的聲音添加到(設置 - 設備 - 音頻配置文件 - 「選擇配置文件」 - 語音呼叫鈴聲),但默認情況下它未被選中,如果我選擇他,他不會播放任何聲音:(

我沒有看到關於SD任何位置的聲音文件,日誌是:

08-05 03:20:22.362: D/AbsolutePath:(6277): /mnt/sdcard/Ding Ding Dong.mp3 
08-05 03:20:22.364: D/DefaultUri:(6277): content://media/external/audio/media/15233 

這個例子:「鼎鼎Dong.mp3」文件和其他人說我抄襲,是在SD卡上,但大小爲0 !!

+0

那麼你有它的工作? – Roylee 2013-05-22 16:18:47

回答

2

試着做這個代碼,, All the best

File k = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone 

ContentValues values = new ContentValues(); 
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
values.put(MediaStore.MediaColumns.TITLE, "My Song title"); 
values.put(MediaStore.MediaColumns.SIZE, 215454); 
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
values.put(MediaStore.Audio.Media.ARTIST, "Madonna"); 
values.put(MediaStore.Audio.Media.DURATION, 230); 
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); 

//Insert it into the database 
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); 
Uri newUri = main.getContentResolver().insert(uri, values); 

RingtoneManager.setActualDefaultRingtoneUri(
    myActivity, 
    RingtoneManager.TYPE_RINGTONE, 
    newUri 
); 
+0

代碼之間的唯一區別是Duration元數據,我認爲這些不是問題,我的問題是我將mp3複製到sd時的步驟。我真的非常感謝你的幫助:)但還沒有正常工作 – Genaut 2012-08-05 12:08:18

+0

@jenuine你能告訴我你如何指定路徑? – Roylee 2013-05-22 16:19:33