在更新时清除应用程序数据

时间:2018-01-30 11:15:11

标签: android version-control versioning android-version

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

我想在应用启动时实施版本检查,但我找不到让应用上一页 versionCodeversionName的方法。我想清除数据的唯一方法是在发布应用时检查lastUpdateTime。但它不可靠,因为用户有其他方式或来源获取应用程序(例如与朋友分享或者如果用户有旧应用程序的备份)。

任何建议?

4 个答案:

答案 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