对安卓手机进行铃声操作,设置默认铃声、删除当前默认铃声、更改铃声

以默认振铃为例子,通过代码设置手机铃声

设置默认振铃

// 将铃声的路径插入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在设置里面仍然会跳出到默认的铃声,但是比如在铃声多多里面获取的结果仍然是显示当前没有设置铃声。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐