我开发了一个 android 应用程序,它有一组活动和一个正在运行的后台服务。我将一些应用程序数据保存到设备的内存中,因此当用户从设置->应用程序->清除数据按钮单击清除数据选项时,保存在内存中的所有数据都会被清除。当用户单击我的应用程序服务或广播接收器类中的清除数据按钮时,我必须捕获清除数据单击事件或操作(如果有),任何人都可以建议单击应用程序的清除数据时设备是否抛出任何操作所以我可以在我的应用广播接收器类中捕捉到该动作并执行所需的任务???
请通过一些示例向我提供解决方案。
问候, 皮克斯
我开发了一个 android 应用程序,它有一组活动和一个正在运行的后台服务。我将一些应用程序数据保存到设备的内存中,因此当用户从设置->应用程序->清除数据按钮单击清除数据选项时,保存在内存中的所有数据都会被清除。当用户单击我的应用程序服务或广播接收器类中的清除数据按钮时,我必须捕获清除数据单击事件或操作(如果有),任何人都可以建议单击应用程序的清除数据时设备是否抛出任何操作所以我可以在我的应用广播接收器类中捕捉到该动作并执行所需的任务???
请通过一些示例向我提供解决方案。
问候, 皮克斯
最好的方法是在应用程序首次运行或保存所有必需的详细信息时在 SharedPreferences 中存储一个值,例如“IS_DATA_CLERED”,并始终确保在应用程序的生命周期中的任何时候都不会修改此值。
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
}
您可以做的是在清单文件的应用程序标记中使用以下属性。
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();
}
}
清除应用程序数据。
当用户单击我的应用程序服务或广播接收器类中的清除数据按钮时,我必须捕获清除数据单击事件或操作(如果有),任何人都可以建议单击应用程序的清除数据时设备是否抛出任何操作所以我可以在我的应用广播接收器类中捕捉到该动作并执行所需的任务???
空无一人。AFAIK,按清除数据也会停止您的进程,因此您的代码将不会运行。您将用户按下清除数据视为与用户第一次安装您的应用程序的情况相同。
也许在您的清单中设置一个广播接收器并收听
“android.intent.action.PACKAGE_DATA_CLEARED”
从设置中清除应用程序数据时广播的意图。您应该能够在 android 开发者网站上找到有关此的更多信息。
http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_DATA_CLEARED