更新时清除应用程序数据

问题描述 投票:0回答:3

当用户从 Google Play 商店或任何其他来源更新应用程序时,我需要以编程方式清除(相当于应用程序设置中的清除数据)应用程序中的所有旧数据。这是因为我不需要旧应用程序中的任何现有数据,因为与旧应用程序相比,我已经更改了新应用程序中的所有内容。

我想过在应用程序启动时实现版本检查,但我找不到方法来获取应用程序的 previous

versionCode
versionName
。我发现清除数据的唯一方法是在发布应用程序时检查
lastUpdateTime
。但它并不可靠,因为用户有其他方式或来源来获取应用程序(例如与朋友共享,或者用户是否有旧应用程序的备份)。

有什么建议吗?

android version-control versioning android-version
3个回答
9
投票

您可以将

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值。


5
投票

您可以简单地使用

PACKAGE_REPLACED
接收器,每当手机中的软件包被更换时(更新应用程序时也会发生),该接收器就会被触发。在您的清单中声明它:

<receiver android:name=".UpdateReceiver">
    <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 UpdateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context con, Intent intent) {
        
    }
}

编辑:您不需要过滤包。使用

MY_PACKAGE_REPLACED
来代替,它将仅针对您的应用程序触发。


0
投票

您可以按照以下意图收听系统广播,并在 onReceive 中使用您的包名称进行过滤,以查看您的应用是否已更新。

<intent-filter>
   <action android:name="android.intent.action.PACKAGE_REPLACED" />
   <data android:scheme="package" />
</intent-filter>
© www.soinside.com 2019 - 2024. All rights reserved.