對安卓手機進行鈴聲操作,設置默認鈴聲、刪除當前默認鈴聲腮敌、更改鈴聲
以默認振鈴為例子,通過代碼設置手機鈴聲
設置默認振鈴
// 將鈴聲的路徑插入contentResolver俏扩,以數(shù)據(jù)庫的形式插入
/**
* 設置默認振鈴
* @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插入到數(shù)據(jù)庫
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);
// 更新當前鈴聲的數(shù)據(jù)录淡,放棄作為鈴聲的狀態(tài)
getContentResolver().delete(deleteUri, MediaStore.MediaColumns.DATA + "=?",
new String[] { deleteFile.getAbsolutePath() });
}
判斷當前uri是否默認鈴聲的uri捌木,因為當我們刪除一個鈴聲之后,再次通過獲取默認鈴聲的方式獲取到的uri是不正確的可能嫉戚,可以通過下面這種獲取uri的文件路徑的方式刨裆,如果路徑為空,表示當前uri不是默認振鈴的
判斷當前uri是否默認炫鈴
// 根據(jù)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);
//如果是正常的查詢到數(shù)據(jù)庫彬檀。然后返回結(jié)構(gòu)
return urlpath;
} catch (Exception e) {
urlpath = "";
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return urlpath;
}
如果文件路徑為空帆啃,那么表示當前不是默認鈴聲,此時窍帝,此時使用vivo在設置里面仍然會跳出到默認的鈴聲努潘,但是比如在鈴聲多多里面獲取的結(jié)果仍然是顯示當前沒有設置鈴聲。