Jos*_*hua 4 versioning version-control android android-version
我需要清除(相当于清除数据的应用程序设置)在应用中的所有旧的数据编程,当用户更新从谷歌Play应用程式商店或任何其他来源。这是因为与旧应用程序相比,我已经更改了新应用程序中的所有内容,因此我不需要旧应用程序中的任何现有数据。
我曾考虑过在应用启动时实施版本检查,但找不到找到应用先前版本 versionCode或的方法versionName。我发现清除数据的唯一方法是lastUpdateTime在发布应用程序时检查。但这并不可靠,因为用户还有其他获取应用程序的方式或来源(例如与朋友共享该应用程序或用户拥有旧应用程序的备份)。
有什么建议么?
你可以存储versionCode在SharedPreferences与当前比较versionCode
为了清除所有数据,您只需要清除SharedPreferences,Local Database和所有已存储的本地文件的所有值。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:不要删除共享首选项中的last_version值。
您只需使用一个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>
Run Code Online (Sandbox Code Playgroud)
并添加您的接收器类。onReceive当应用程序更新时将被调用:
public class UpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context con, Intent intent) {
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:您不需要过滤包。使用MY_PACKAGE_REPLACED它只会为您的应用程序触发。
| 归档时间: |
|
| 查看次数: |
2554 次 |
| 最近记录: |