【问题标题】:Android Detect clear data for refreshing widgetAndroid 检测清除数据以刷新小部件
【发布时间】:2017-11-29 22:48:27
【问题描述】:

有什么方法可以通过广播“实时”知道用户何时清除了应用程序的数据?

我有一个显示一些用户详细信息的小部件,它们存储在首选项中,但是当用户清除应用程序数据时,我无法知道它,直到下一次刷新/更新(onUpdate() 调用),即每 30 分钟一次。

在此期间,小部件显示无用值。所以我需要以某种方式触发任何广播以从接收器捕获它并在发生这种情况时更新小部件。

这可能吗?

【问题讨论】:

  • 问题不是应用程序,是一个已经在主屏幕中的小部件

标签: android android-widget android-preferences


【解决方案1】:

看起来没有办法为此获取事件。清除数据后应终止应用程序的进程。 https://stackoverflow.com/a/10701338/450243

【讨论】:

    【解决方案2】:

    您可以使用实现http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html 的服务来监控您的偏好何时发生变化。

    即使服务被系统杀死,如果您使用 START_STICKY,它也会被激活,您将能够确定您的密钥是否可用或已被删除。我已经在几个应用程序中使用了这种方法,它就像一个魅力。

    如果您想提高效率,可以添加一个屏幕开/关接收器,这样您就可以在屏幕启动时启动服务,在屏幕启动时终止服务。

    希望对你有帮助。

    【讨论】:

    • 但是当用户清除应用程序的数据时,它是否正在工作/被触发?
    • 如果用户清除了应用程序的数据(并且最后一个没有停止)是的,它被触发了。如果系统决定停止/启动您的服务,检测您的首选项是否包含 Service.onStart(...) 中的任何键非常简单,因此无论哪种方式都可以工作。
    【解决方案3】:

    您也可以看看这个解决方案,您不会完全得到回调,但您将有机会在清除数据之前更新您的小部件

    android:manageSpaceActivity=".path.to.MyActivity"
    

    这会将设置中的“清除数据”按钮替换为“管理空间”。现在您可以将用户重定向到由您控制的自定义活动。

    活动的启动将作为您的回调。在您的活动中处理您的数据并使用以下代码

    private void clearPreferences() {
        try {
            // clearing app data
            Runtime runtime = Runtime.getRuntime();
            runtime.exec("pm clear YOUR_APP_PACKAGE_GOES HERE");
    
        } catch (Exception e) {
            e.printStackTrace();
         }
       }
    

    清除应用数据。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2015-03-19
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多