【问题标题】:how to clear sharedpreferance exactly at 12am in broadcast receiver android?如何在广播接收器android中的凌晨12点准确清除sharedpreference?
【发布时间】:2025-04-10 18:35:02
【问题描述】:

我想在上午 12 点在广播接收器中清除我的共享偏好字段电话号码。我将如何做到这一点? 这是我的代码...


    @Override
    public void onReceive(Context context, Intent intent) {
        SharedPreferences prefs = context .getSharedPreferences("connect", Context.MODE_PRIVATE);


        String username = prefs.getString("phonenumber", null ) ;  

    }



}```
  

【问题讨论】:

  • 您是在问如何在凌晨 12 点清除偏好或清除逻辑吗?要清除首选项 preferences.edit().clear().apply() 以清除单个对象 preferences.edit().putString(key, "").apply() 的 12 点逻辑,您可以尝试警报管理器或 JobScheduler
  • @ShahnawazAnsari 请帮我做这件事?我如何使用警报管理器或作业调度器?

标签: java android android-studio time broadcastreceiver


【解决方案1】:

报警管理器

只要警报接收器的 onReceive() 方法正在执行,警报管理器就会持有 CPU 唤醒锁。

timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

        synchronized public void run() {

           preferences.edit().putString(key, "").apply()
            }

        }, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));

ScheduledThreadPoolExecutor.

您可以使用 java.util.Timer 或 ScheduledThreadPoolExecutor(首选)来安排在后台线程上定期执行的操作。

ScheduledExecutorService scheduler =
    Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate
      (new Runnable() {
         public void run() {
            // call the preferences clear logic 
         }
      }, 0, 10, TimeUnit.MINUTES);

编辑:

您实际上可以节省安装时间,然后计算一下是否已经过了一周。如果它有明确的共享偏好

//First time
long installed = context
    .getPackageManager()
    .getPackageInfo(context.getPackag‌​eName(), 0)
    .firstInstallTime;

参考:More on periodic event handling Get install time and clear shared preference

【讨论】:

  • 如何将时间更改为晚上 11 点以清除偏好
  • 在代码中,您可以看到它没有特定的工作时间间隔,因此可以在任何时候工作
  • 你能写在代码中,间隔7天后,清除sharedpreference吗?
  • 更新了答案中的代码..请检查
  • 还有其他方法吗?
最近更新 更多