问题:关于系统铃音,当设置铃音为null,然后升级系统,导致铃音改变成默认的铃音而不是null
分析:首次启动,系统默认的方法是判断数据库的值是否为null(TextUtils.isEmpty(existingSettingValue))
如果是null就会设置默认铃音,所以,我的修改是判断数据库中是否有此数据,因为一但设置过铃音,就会在数据库中存在对应的一条数据(无论里面数据是null或是具体的值).如果没有这条数据,说明以前没有设置过.
private void setRingtoneIfNotSet(String settingName, Uri uri, long rowId) {
if (wasRingtoneAlreadySet(settingName)) {
return;
}
ContentResolver cr = mContext.getContentResolver();
String existingSettingValue = Settings.System.getString(cr, settingName);
i
f (checkColumnExist(settingName)) {
final Uri settingUri = Settings.System.getUriFor(settingName);
final Uri ringtoneUri = ContentUris.withAppendedId(uri, rowId);
RingtoneManager.setActualDefaultRingtoneUri(mContext,
RingtoneManager.getDefaultType(settingUri), ringtoneUri);
}
Settings.System.putInt(cr, settingSetIndicatorName(settingName), 1);
}
public boolean checkColumnExist (String name){
ContentResolver res = mContext.getContentResolver();
try{
Cursor cursor = res.query(Settings.System.CONTENT_URI,
new String[]{
Settings.System.NAME,
Settings.System.VALUE,
},Settings.System.NAME+"=?",new String[]{name},null);
while(cursor.moveToNext()){
if(cursor.getString(0).equals(name))
return true;
}
} catch (Exception e){
return false;
}
}