프로그램/Android

안드로이드 mp3파일 전화벨소리 지정

잡식성초보 2017. 8. 28. 14:43

안드로이드 전화 벨소리 지정하는 코드방식이다.


전화 벨소리 또한 ContentValues 를 이용하여 내부디비에 저장 하는 방법이다.



public void Ringtone(Context ctx, File file){
    if (file == null)
        return;

    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());  //파일 위치
    values.put(MediaStore.MediaColumns.TITLE, file.getName());  //파일명
    values.put(MediaStore.MediaColumns.SIZE, file.length());  //파일 사이즈
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");  //파일 형태
    values.put(MediaStore.Audio.Media.ARTIST, "호우");
    values.put(MediaStore.Audio.Media.DURATION, 300);
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);  //벨소리인지
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);  //노티알림으로 선택할수 있도록 할건지
    values.put(MediaStore.Audio.Media.IS_ALARM, false);  //앨범인지
    values.put(MediaStore.Audio.Media.IS_MUSIC, true);  //음악인지  이것을 하면 안드로이드 기본 음원에도 나타난다.

    //밑에서 처럼 지웠다가 다시 넣어주는 이유는 똑같은 파일을 넣을시 정상적으로 작동하지 않는 경우가 있었음
    //참고로 이 벨소리 지정은 mp3파일을 다운받아서 바로 벨소리로 지정하는 로직에서 쓰였던것이다. 
    Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());

    try{
        ctx.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + dataFile.getAbsolutePath() + "\"", null);
    }catch (Exception e){
        e.printStackTrace();
    }

    Uri uri2 = ctx.getContentResolver().insert(uri, values);

    RingtoneManager.setActualDefaultRingtoneUri(
            ctx,
            RingtoneManager.TYPE_RINGTONE,
            uri2
    );
}


반응형