当用户更新时,我需要以编程方式清除(相当于应用设置中的清除数据)应用中的所有旧数据来自Google Play商店或任何其他来源的应用。这是因为我不需要旧应用程序中的任何现有数据,因为我已经更改了新应用程序中的所有数据,而不是旧应用程序。
我想在应用启动时实施版本检查,但我找不到让应用上一页 versionCode
或versionName
的方法。我想清除数据的唯一方法是在发布应用时检查lastUpdateTime
。但它不可靠,因为用户有其他方式或来源获取应用程序(例如与朋友分享或者如果用户有旧应用程序的备份)。
任何建议?
答案 0 :(得分:4)
您可以将versionCode
存储在SharedPreferences
中并与当前versionCode
进行比较
要清除所有数据,您只需清除SharedPreferences,本地数据库和您存储的所有本地文件的所有值。
public void clearData()
{
try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int mCurrentVersion = pInfo.versionCode;
SharedPreferences mSharedPreferences = getSharedPreferences("app_name", Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSharedPreferences.edit();
mEditor.apply();
int last_version = mSharedPreferences.getInt("last_version", -1);
if(last_version != mCurrentVersion)
{
//clear all your data like database, share preference, local file
//Note : Don't delete last_version value in share preference
}
mEditor.putInt("last_version", mCurrentVersion);
mEditor.commit();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
注意:请勿删除共享偏好中的 last_version 值。
答案 1 :(得分:1)
您可以简单地使用PACKAGE_REPLACED
接收器,只要您的手机更换了一个包,就会被触发(在更新应用时也会发生)。在你的清单中声明它:
<receiver android:name=".UpdateReciever">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.my.app" />
</intent-filter>
</receiver>
添加你的接收器类。更新应用时会调用onReceive
:
public class UpdateReciever extends BroadcastReceiver {
@Override
public void onReceive(Context con, Intent intent) {
}
}
编辑:您不需要过滤包。请使用MY_PACKAGE_REPLACED
,而只会为您的应用启动。
答案 2 :(得分:0)
您可以使用以下意图收听系统广播,并使用您的包名称过滤onReceive,以查看您的应用是否已更新。
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
答案 3 :(得分:0)
如果您使用的是Android Studio,则可以在gradle文件中指定的BuildConfig.VERSION_CODE形式获得vesrion名称和vesrion代码-
sap.f.Card