清单/ gradle中是否有任何标记可以在设备上安装新版本的应用时删除所有应用数据。
如您所知,在安装新版本的应用程序时,Android操作系统希望您选择“新闻”或“全部”(仅安装新内容或删除所有数据并进行安装)。
有没有办法强制删除所有数据,并安装应用程序?
更新
我不想手动清除sharedPref并检查代码中的版本代码。
我的问题是:在设备上安装新版本的应用程序时,清单中是否有任何标记或以任何方式自动删除所有数据。
答案 0 :(得分:0)
了解您的应用何时更新:只需检查您当前的应用版本。
PackageInfo packageInfo = activity.getPackageManager()
.getPackageInfo(activity.getPackageName(), 0);
int versionCode = packageInfo.versionCode;
当您的应用启动时,您可以使用版本代码检查SharedPreferences
的整数值。如果没有,或者它不匹配 - >您的应用是新的或刚更新的 - >清晰的数据。然后,将新的versionCode
值写入SharedPreferences
。
要清除您的应用数据:API 19(KitKat)中引入了新API:ActivityManager.clearApplicationUserData()。
if (VERSION_CODES.KITKAT <= VERSION.SDK_INT) {
((ActivityManager)context.getSystemService(ACTIVITY_SERVICE))
.clearApplicationUserData(); // note: it has a return value!
} else {
// use old hacky way, which can be removed
// once minSdkVersion goes above 19 in a few years.
}
更新:可以在某些情况下擦除SharedPreferences。
使用BroadcastReceiver
:
public YourUpgradeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Uri packageName = intent.getData();
if(packageName.toString().equals("package:" + context.getPackageName()){
//Application was upgraded
}
}
}
<强>的AndroidManifest.xml 强>
<receiver android:name=".YourUpgradeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
答案 1 :(得分:0)
假设您的数据存储在应用SharedPreferences
中,您可以使用SharedPreferences.Editor
方法clear()
删除所有与应用相关的数据。
这样:
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.commit();
希望它有所帮助。