android MediaScanner 原生bug 关于系统铃音

问题:关于系统铃音,当设置铃音为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;
    }
}

你可能感兴趣的:(android)