android - 有没有办法在重新安装应用程序时删除android中的sharedPrefs?
问题描述
我觉得这很奇怪,但是当我卸载我的应用程序并再次安装它时,它会恢复 SharedPrefs,它负责我的进度条进度。我试过 allow backup=false 和 android:fullBackupOnly=false 但它不起作用。
这是代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityMainBinding.inflate(layoutInflater)
val view = mBinding.root
setContentView(view)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACTIVITY_RECOGNITION)
!= PackageManager.PERMISSION_GRANTED) {
showRationalDialogForPermissions()
} else {
val MY_PERMISSIONS_REQUEST_ACTIVITY_RECOGNITION = 1
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACTIVITY_RECOGNITION),
MY_PERMISSIONS_REQUEST_ACTIVITY_RECOGNITION)
}
loadData()
resetSteps()
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
}
override fun onResume() {
super.onResume()
running = true
val stepSensor = sensorManager?.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
if (stepSensor == null) {
Toast.makeText(
this,
"No sensor for step counter detected on this device",
Toast.LENGTH_SHORT
).show()
} else {
sensorManager?.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_UI)
}
}
override fun onSensorChanged(event: SensorEvent?) {
if (running) {
totalSteps = event!!.values[0]
val currentSteps = totalSteps.toInt() - previousTotalSteps.toInt() // in resetSteps, previous total steps is equal to total steps, therefore 90 - 90 is 0
mBinding.tvStepsTaken.text = ("$currentSteps")
mBinding.progressCircular.apply {
setProgressWithAnimation(currentSteps.toFloat())
}
}
}
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {
}
fun saveData() {
val sharedPrefs =
getSharedPreferences("myPrefs", Context.MODE_PRIVATE)
val editor = sharedPrefs.edit()
editor.putFloat("key1", previousTotalSteps)
editor.apply()
}
private fun loadData() {
val sharedPrefs =
getSharedPreferences("myPrefs", Context.MODE_PRIVATE)
val savedNum: Float = sharedPrefs.getFloat("key1", 0f)
Log.d("MainActivity", "$savedNum")
previousTotalSteps = savedNum
}
fun resetSteps() {
mBinding.tvStepsTaken.setOnClickListener {
Toast.makeText(this, "Long press to reset steps", Toast.LENGTH_SHORT).show()
}
mBinding.tvStepsTaken.setOnLongClickListener {
totalSteps = previousTotalSteps
mBinding.tvStepsTaken.text = 0.toString()
mBinding.progressCircular.progress = 0f
saveData()
true
}
}
因此,当我再次安装应用程序时,进度条仍然计数 previousTotalSteps,当我单击它时,它会重新启动为 0,但是当再次打开应用程序时,进度条中仍然有 previousTotalSteps。这就像在 sharedPrefs 中保存所有步骤,而不管调用 resetSteps 函数或重新安装应用程序本身。即使我在重新打开应用程序后手动删除缓存和数据,它也会恢复数据哈哈
解决方案
您还可以android:fullBackupOnly=false
在清单文件中指定android:allowBackup=false
.
推荐阅读
- scala - 如何计算特定列值的 min max avg 并将其存储在新列中?
- android - Play 商店拒绝我的应用获取敏感权限
- corda - 如何将数据插入corda?
- reactjs - TypeError:属性存在时无法读取未定义的属性
- java - 在 firebase 中保存数据时出现问题,我收到 a:""b:""c:""d:"" 而不是真实姓名
- html - 如何使用 CSS 在 webview 中显示图像
- couchdb - 多个数据库会是最好的方法吗?
- internet-explorer - IE11 iframe 缓存内容编码错误
- angular - Internet Explorer 11 - 如果 GET URL 为“长”,则 OPTIONS 请求失败
- java - 无法解析符号“文件”