Android 设置铃声,getContentResolver().insert returns null

在通过Android设置手机铃声的时候,在4.4版本总会遇到getContentResolver().insert  返回null的时候。

下面插入铃声的代码,在调用下面代码的时候会出现返回null。而且没有任何报错信息。查了很久都无法找到原因。

final Uri newUri = getContentResolver().insert(uri, values);

然后改用update尝试,出现错误信息,错误提示是 "_data is not unique".

getContentResolver().update(uri, values, null, null);


分析原因可能是以前有这个column 记录不唯一。

所以在

final Uri newUri = getContentResolver().insert(uri, values);

前加上删除记录,问题解决。

getContentResolver().delete(uri, null, null);
调用方法:
setUserCustomVoice(outPathRingFile,RingtoneManager.TYPE_ALARM);

private void setUserCustomVoice (String path, int type)
	{		

		/*Sometimes, this function will be failed because of the wrong path.
		 * Only the path "/sdcard/media/audio/ringtones/" is available to set ring.
		 * For example:
		 * setUserCustomVoice("/sdcard/media/audio/ringtones/wang.mp3",RingtoneManager.TYPE_ALARM);
		 */
		File sdfile = new File(path);    
		String mimeType = "audio/*";
		ContentValues values = new ContentValues();  
		values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());  
		values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());  
		values.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
		values.put(MediaStore.MediaColumns.SIZE, sdfile.length());  
		

		values.put(MediaStore.Audio.Media.IS_RINGTONE, false);  
		values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);  
		values.put(MediaStore.Audio.Media.IS_ALARM, false);  
		values.put(MediaStore.Audio.Media.IS_MUSIC, false);  

		switch (type)
		{
		case RingtoneManager.TYPE_NOTIFICATION:
			values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
			break;
		case RingtoneManager.TYPE_ALARM:
			values.put(MediaStore.Audio.Media.IS_ALARM, true);
			break;
		case RingtoneManager.TYPE_RINGTONE:
			values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
			break;
		default:
			type = RingtoneManager.TYPE_ALL;
			values.put(MediaStore.Audio.Media.IS_MUSIC, true);  
			break;  
		}
		
		System.out.println("values: " + values);
		
		System.out.println("Ring absPath: " + sdfile.getAbsolutePath());
		System.out.println("RingPath: " + path);
		
		Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());
		System.out.println("uri: " + uri);
		
		getContentResolver().delete(uri, null, null);
		/*The following code always returns null, Why? Why?*/
		final Uri newUri = getContentResolver().insert(uri, values);
		
		//getContentResolver().update(uri, values, null, null);
		System.out.println("newUri: "+newUri);
		RingtoneManager.setActualDefaultRingtoneUri(RingToneTailor.this, type, newUri);  
	}



final Uri newUri = getContentResolver().insert(uri, values);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值