修复反射修改 mPreferencesDir 未恢复导致备份恢复后设置丢失的问题
This commit is contained in:
@@ -33,12 +33,17 @@ fun Context.getSharedPreferences(
|
|||||||
// 获取 ContextImpl。mPreferencesDir变量,该变量保存了数据文件的保存路径
|
// 获取 ContextImpl。mPreferencesDir变量,该变量保存了数据文件的保存路径
|
||||||
val fieldMPreferencesDir = objMBase.javaClass.getDeclaredField("mPreferencesDir")
|
val fieldMPreferencesDir = objMBase.javaClass.getDeclaredField("mPreferencesDir")
|
||||||
fieldMPreferencesDir.isAccessible = true
|
fieldMPreferencesDir.isAccessible = true
|
||||||
|
// 保存原始路径
|
||||||
|
val originalDir = fieldMPreferencesDir.get(objMBase)
|
||||||
// 创建自定义路径
|
// 创建自定义路径
|
||||||
val file = File(dir)
|
val file = File(dir)
|
||||||
// 修改mPreferencesDir变量的值
|
// 修改mPreferencesDir变量的值
|
||||||
fieldMPreferencesDir.set(objMBase, file)
|
fieldMPreferencesDir.set(objMBase, file)
|
||||||
// 返回修改路径以后的 SharedPreferences :%FILE_PATH%/%fileName%.xml
|
// 返回修改路径以后的 SharedPreferences :%FILE_PATH%/%fileName%.xml
|
||||||
return getSharedPreferences(fileName, Activity.MODE_PRIVATE)
|
val sp = getSharedPreferences(fileName, Activity.MODE_PRIVATE)
|
||||||
|
// 恢复原始路径,避免后续 defaultSharedPreferences 等调用读到错误目录
|
||||||
|
fieldMPreferencesDir.set(objMBase, originalDir)
|
||||||
|
return sp
|
||||||
} catch (e: NoSuchFieldException) {
|
} catch (e: NoSuchFieldException) {
|
||||||
e.printOnDebug()
|
e.printOnDebug()
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
|
|||||||
Reference in New Issue
Block a user