我开发了一个Android应用程序,它有一组活动和一个后台服务正在运行。我将一些应用程序数据保存到设备的内部存储器中,以便当用户点击Settings-> Applications->中的Clear Data选项时。清除数据按钮,保存在内部存储器中的所有数据都被清除。 当用户点击我的应用程序服务中的“清除数据”按钮或广播接收器类时,我必须捕获Clear Data点击事件或操作(如果有的话),任何人都可以建议设备在点击清除数据时发出任何操作所以我可以在我的app广播接收器类中捕获该动作并执行所需的任务???
请以一些例子向我提供决议。
此致 皮克斯
答案 0 :(得分:5)
最好的方法是在首次运行应用程序时保存SharedPreferences中的值,例如“IS_DATA_CLEARED”,或者保存所有必需的详细信息,并始终确保在应用程序的生命周期内任何时候都不会弄乱这个值。 / p>
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = appSharedPrefs.edit();
editor.putBoolean("IS_DATA_CLEARED",false);
editor.apply();
然后每次都进行以下检查。
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
boolean IS_DATA_CLEARED = appSharedPrefs.getBoolean("IS_DATA_CLEARED",true);
if(IS_DATA_CLEARED){
//DATA IS CLEARED
}
else{
//DATA IS NOT CLEARED
}
答案 1 :(得分:2)
当用户点击我的应用程序服务中的“清除数据”按钮或广播接收器类时,我必须捕获“清除数据”单击事件或操作(如果有的话),任何人都可以建议设备在单击“清除”时抛出任何操作app的数据,所以我可以在我的app广播接收器类中捕获该动作并执行所需的任务???
没有。 AFAIK,按下清除数据也会停止您的进程,因此您的代码将无法运行。您可以将用户按清除数据视为与用户第一次安装应用程序的情况相同。
答案 2 :(得分:1)
您可以使用清单文件中的应用程序标记中的以下属性。
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();
}
}
清除应用数据。