首页 > 解决方案 > 有没有办法在重新安装应用程序时删除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 函数或重新安装应用程序本身。即使我在重新打开应用程序后手动删除缓存和数据,它也会恢复数据哈哈

标签: androidandroid-studiokotlin

解决方案


您还可以android:fullBackupOnly=false在清单文件中指定android:allowBackup=false.


推荐阅读