对安卓手机进行铃声操作,设置默认铃声、删除当前默认铃声、更改铃声
以默认振铃为例子,通过代码设置手机铃声
设置默认振铃
// 将铃声的路径插入contentResolver,以数据库的形式插入
/**
* 设置默认振铃
* @param musicInfo 歌曲信息
* @param ringtoneFile 振铃文件,包含绝对路径
*/
private void setRingtoneImpl(MusicInfo musicInfo, File ringtoneFile) {
ContentValues content = new ContentValues();
content.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath());
content.put(MediaStore.MediaColumns.TITLE, musicInfo.getSongName());
//content.put(MediaStore.MediaColumns.SIZE, ringtoneFile);
content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
// content.put(MediaStore.Audio.Media.ARTIST, "Madonna");
//content.put(MediaStore.Audio.Media.DURATION, 230);
content.put(MediaStore.Audio.Media.IS_RINGTONE, true);
content.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
content.put(MediaStore.Audio.Media.IS_ALARM, true);
content.put(MediaStore.Audio.Media.IS_MUSIC, false);
// 获取文件是external还是internal的uri路径
Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile.getAbsolutePath());
// 铃声通过contentvaues插入到数据库
final Uri newUri = getContentResolver().insert(uri, content);
currentRingtoneUri = newUri;
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(),
RingtoneManager.TYPE_RINGTONE, newUri);
}
删除默认振铃
删除铃声操作,参考:
private void deleteRingtone(Uri deleteUri, File deleteFile) {
ContentValues cv = new ContentValues();
cv.put(MediaStore.Audio.Media.IS_RINGTONE, false);
cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
cv.put(MediaStore.Audio.Media.IS_ALARM, false);
cv.put(MediaStore.Audio.Media.IS_MUSIC, true);
// 更新当前铃声的数据,放弃作为铃声的状态
getContentResolver().delete(deleteUri, MediaStore.MediaColumns.DATA + "=?",
new String[] { deleteFile.getAbsolutePath() });
}
判断当前uri是否默认铃声的uri,因为当我们删除一个铃声之后,再次通过获取默认铃声的方式获取到的uri是不正确的可能,可以通过下面这种获取uri的文件路径的方式,如果路径为空,表示当前uri不是默认振铃的
判断当前uri是否默认炫铃
// 根据uri获取文件路径
private String getPathFromUri(Uri contentUri) {
String[] projection = { MediaStore.Audio.Media.DATA };
String urlpath;
CursorLoader loader = new CursorLoader(this, contentUri, projection, null, null, null);
Cursor cursor = loader.loadInBackground();
try {
int column_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
urlpath = cursor.getString(column_index);
//如果是正常的查询到数据库。然后返回结构
return urlpath;
} catch (Exception e) {
urlpath = "";
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return urlpath;
}
如果文件路径为空,那么表示当前不是默认铃声,此时,此时使用vivo在设置里面仍然会跳出到默认的铃声,但是比如在铃声多多里面获取的结果仍然是显示当前没有设置铃声。
网友评论