2012-05-24 3 views
1

Android 프로그램에서 전화의 벨소리를 설정하려고합니다. 아래 코드를 한 번 실행하면 벨소리가 올바르게 설정되고 정상적으로 작동합니다. 그러나 코드를 두 번 이상 실행하면 벨소리가 무음이됩니다. 이것을 알아내는 데 도움이 될 것이고 매우 감사 할 것입니다.전화 벨소리 설정 문제

void setRingtone() { 
    //File path = Environment.getExternalStorageDirectory(); 

    //File file = new File(path, "ringtone.mp3"); 


    File file = new File("/sdcard/", "ringtone.mp3"); 
    Uri mUri = Uri.parse("android.resource://com.*****.*****/" + R.raw.*****); 
    ContentResolver mCr = getContentResolver(); 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, "my ringtone"); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/oog"); 
    values.put(MediaStore.MediaColumns.SIZE, file.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(file.getAbsolutePath()); 
    Uri newUri = mCr.insert(uri, values); 

    try { 
     RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri); 
    } catch (Throwable t) {} 

} 

답변

3

문제는 RingtoneManager.setActualDefaultRingtoneUri가 벨소리로 식별과 데이터베이스에 파일 경로를 추가하는 것이 었습니다. 파일 경로가 이미 데이터베이스에 있기 때문에 오류가 있으며 값이 null이됩니다 (올바르게 이해하는 경우). 이것이 설정 후 처음으로 작동하는 이유입니다. 이 문제를 해결하려면 먼저 참조를 삭제해야합니다. 이렇게하는 코드는 다음과 같습니다.

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA 
+ "=\"" + file.getAbsolutePath() + "\"", null);