首先介绍一下Android系统支持的铃声格式。有以下几种:
64赫兹Midi,AAC、AAC+、AMR、WAV、MP3、Real Audio、WMA、OGG等格式。
将音频文件设置成铃声很简单,只需如下几步即可:
1) 获取系统音频文件的Uri
Uri uri =MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());//获取系统音频文件的Uri
2) 将文件插入系统媒体库,并获取新的Uri
Uri newUri = this.getContentResolver().insert(uri,values);//将文件插入系统媒体库,并获取新的Uri
3) 设置铃声
RingtoneManager.setActualDefaultRingtoneUri(this, ringType, newUri);//设置铃声
下面是设置铃声的详细代码:
/**
* 设置铃声
*
* @param ringType int: 铃声类型
* @param file File: 要设为铃声的文件
* @param title 标题
*/
public static boolean setRingtone(Context context, int ringType, File file, String title) {
boolean isRingtone = false, isNotification = false, isAlarm = false, isMusic = false;
String showText = "";
switch (ringType) {
case RingtoneManager.TYPE_ALARM://闹铃
isAlarm = true;
showText = "闹钟";
break;
case RingtoneManager.TYPE_NOTIFICATION://通知
isNotification = true;
showText = "通知";
break;
case RingtoneManager.TYPE_RINGTONE://来电
isRingtone = true;
showText = "来电";
break;
case RingtoneManager.TYPE_ALL://添加到铃声库(全部铃声)
isMusic = true;
showText = "全部";
break;
default:
break;
}
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, TextUtils.isEmpty(title) ? file.getName() : title);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
values.put(MediaStore.Audio.Media.IS_RINGTONE, isRingtone);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, isNotification);
values.put(MediaStore.Audio.Media.IS_ALARM, isAlarm);
values.put(MediaStore.Audio.Media.IS_MUSIC, isMusic);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());//获取系统音频文件的Uri
try {
//删除之前的铃声
context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + file.getAbsolutePath() + "\"", null);
Uri newUri = context.getContentResolver().insert(uri, values);//将文件插入系统媒体库,并获取新的Uri
if (newUri != null) {
RingtoneManager.setActualDefaultRingtoneUri(context, ringType, newUri);//设置铃声
}
Toast.makeText(context, "设置" + showText + "铃声成功", Toast.LENGTH_SHORT).show();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}