做了一个音乐播放器,要求有设置铃声的功能,在网上找了很多代码都没有效果,于是自己研究了一下。
public void setMyRingtone(String path){
//如果没有权限,必须先给权限。
if (!Settings.System.canWrite(mContext)){
//ToastUtil.longTips("请在该设置页面勾选,才可以使用路况提醒功能");
Uri selfPackageUri = Uri.parse("package:"
+ mContext.getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
selfPackageUri);
mContext.startActivity(intent);
}else {
File sdFile = new File(path);
//ComtentValues 用于存储数据的contenvalues只能存储基本类型的数据
ContentValues values = new ContentValues();
//文件路径
values.put(MediaStore.MediaColumns.DATA,sdFile.getAbsolutePath());
//文件名
values.put(MediaStore.MediaColumns.TITLE,sdFile.getName());
values.put(MediaStore.MediaColumns.MIME_TYPE,"audio/*");
values.put(MediaStore.Audio.Media.IS_RINGTONE,true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION,false);
values.put(MediaStore.Audio.Media.IS_ALARM,false);
values.put(MediaStore.Audio.Media.IS_MUSIC,false);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdFile.getAbsolutePath());
Uri newUri=null;
Cursor cursor = mContext.getContentResolver().query(uri, null, MediaStore.MediaColumns.DATA + "=?", new String[] { path },null);
if (cursor.moveToFirst() && cursor.getCount() > 0){
String _id=cursor.getString(0);
Log.d(TAG," cursor.getCount ");
mContext.getContentResolver().update(uri, values, MediaStore.MediaColumns.DATA + "=?",new String[] { path });
newUri = ContentUris.withAppendedId(uri, Long.valueOf(_id));
}
//网上很多用的newUri 是直接这样获取的,打印出来是空的,这就是失败的原因。要通过在数据库中查找才能成功
//Uri newUri = context.getContentResolver().insert(uri,values);
if (newUri!=null){
RingtoneManager.setActualDefaultRingtoneUri(mContext,RingtoneManager.TYPE_RINGTONE,newUri);
}
Toast.makeText(mContext.getApplicationContext(),"设置来电铃声成功!",Toast.LENGTH_SHORT).show();
}
}