关于修改bug后当时有效而OTA升级后显示bug并未解决的问题

之前在解一个闹钟在静音模式下不响铃的bug的时候,删掉了一行代码

ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_RING)|
                                        (1 << AudioSystem.STREAM_NOTIFICATION)|
                                        (1 << AudioSystem.STREAM_ALARM)|
                                        (1 << AudioSystem.STREAM_SYSTEM);

 删掉了其中的

(1 << AudioSystem.STREAM_ALARM)|

 这一行代码。之后验证,问题是解决了的。可是在未解决版本上通过OTA升级的方法把这个问题的解决体现出来的时候是没有效果的。

苦苦寻找解决办法数天之后,发现

ringerModeAffectedStreams

这个值的存取是通过读写数据库完成的。即

ringerModeAffectedStreams = Settings.System.getIntForUser(mContentResolver,
                Settings.System.MODE_RINGER_STREAMS_AFFECTED,
                ((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
                 (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)),
                 UserHandle.USER_CURRENT);

 和

Settings.System.putIntForUser(mContentResolver,
                    Settings.System.MODE_RINGER_STREAMS_AFFECTED,
                    ringerModeAffectedStreams,
                    UserHandle.USER_CURRENT);

 从而得到启发,

(1 << AudioSystem.STREAM_ALARM)

这一项在之前的版本是通过“或”的方式加进数据库的,而之后删掉这一行,并不能在数据库中把这一项的值去掉,即变成0。

故最终还需要在代码中加入这句

ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_ALARM);

 通过这种“移位”“与”的方式把相应的为置零。

你可能感兴趣的:(android,数据库,OTA升级)