android 版本更新 同时清除旧版本数据
16lz
2021-01-23
1.引导界面同时鉴别是不是新版本,用来重新出现loading页和清除旧版本数据
package com.xionghu.view;import java.util.ArrayList;import com.example.utils.Common;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.ImageView;/** * @author yangyu 功能描述:引导界面activity类 */public class GuideActivity extends Activity implements OnPageChangeListener {// 定义ViewPager对象private ViewPager viewPager;// 定义ViewPager适配器private ViewPagerAdapter vpAdapter;// 定义一个ArrayList来存放Viewprivate ArrayList views;// 定义各个界面View对象private View view1, view2, view3, view4, view5;// 定义开始按钮对象private ImageView startBt;// 是否是第一次使用private boolean isFirstUse;private int old_install_Code, current_versionCode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.activity_guide);SharedPreferences preferences = getSharedPreferences("isFirstUse", 1);// 读取SharedPreferences中需要的数据isFirstUse = preferences.getBoolean("isFirstUse", true);old_install_Code = preferences.getInt("old_install_Code", 0);// Common.getVerCode 中包名一定要与本应用包名一致current_versionCode = Common.getVerCode(getApplicationContext());if (isFirstUse || old_install_Code == 0|| current_versionCode > old_install_Code) {initView();} else {Intent intent = new Intent();intent.setClass(GuideActivity.this, MainActivity.class);startActivity(intent);this.finish();}}/** * 初始化组件 */private void initView() {// 实例化各个界面的布局对象LayoutInflater mLi = LayoutInflater.from(this);view1 = mLi.inflate(R.layout.guide_view01, null);view2 = mLi.inflate(R.layout.guide_view02, null);view3 = mLi.inflate(R.layout.guide_view03, null);view4 = mLi.inflate(R.layout.guide_view04, null);// 实例化ViewPagerviewPager = (ViewPager) findViewById(R.id.viewpager);// 实例化ArrayList对象views = new ArrayList();// 实例化ViewPager适配器vpAdapter = new ViewPagerAdapter(views);// 实例化开始按钮startBt = (ImageView) view4.findViewById(R.id.start_img);initData();}/** * 初始化数据 */private void initData() {// 设置监听viewPager.setOnPageChangeListener(this);// 将要分页显示的View装入数组中views.add(view1);views.add(view2);views.add(view3);views.add(view4);// 设置适配器数据viewPager.setAdapter(vpAdapter);// 给开始按钮设置监听startBt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startbutton();}});}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int arg0) {}/** * 相应按钮点击事件 */private void startbutton() {SharedPreferences preferences = getSharedPreferences("isFirstUse", 1);// 实例化Editor对象Editor editor = preferences.edit();// 存入数据editor.putBoolean("isFirstUse", false);editor.putInt("old_install_Code", current_versionCode);// 提交修改editor.commit();// 本应用数据清除管理器 DataCleanManager// DataCleanManager.cleanSharedPreference(this);// 清除本应用旧版本SharedPreference// DataCleanManager.cleanDatabases(this) 清除本应用旧版本所有数据库Intent intent = new Intent();intent.setClass(GuideActivity.this, MainActivity.class);startActivity(intent);this.finish();}}
当AndroidManifest.xml 中 android:versionCode="1" 改为 android:versionCode="2" 时 你会发现loading页又出现了
2.Common.java用来 识别当前版本号
package com.example.utils;/** * @author harvic * @date 2014-5-7 * @address http://blog.csdn.net/harvic880925 */import android.content.Context;import android.content.pm.PackageManager.NameNotFoundException;import android.util.Log;public class Common {/** * 获取软件版本号 * @param context * @return */public static int getVerCode(Context context) { int verCode = -1; try { //注意:"com.example.try_downloadfile_progress"对应AndroidManifest.xml里的package="……"部分 verCode = context.getPackageManager().getPackageInfo( "com.xionghu.view", 0).versionCode; } catch (NameNotFoundException e) { Log.e("msg",e.getMessage()); } return verCode; } /** * 获取版本名称 * @param context * @return */ public static String getVerName(Context context) { String verName = ""; try { verName = context.getPackageManager().getPackageInfo( "com.xionghu.view", 0).versionName; } catch (NameNotFoundException e) { Log.e("msg",e.getMessage()); } return verName; } /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 获取手机状态栏高度 */ public static int getStatusBarHeight(Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; } /** * 根据手机的分辨率从 px(像素) 的单位 转成为 dp */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } }
package com.xionghu.view;/* * 文 件 名: DataCleanManager.java * 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录 */import java.io.File;import android.annotation.SuppressLint;import android.content.Context;import android.os.Environment;/** * 本应用数据清除管理器 */public class DataCleanManager {/** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */public static void cleanInternalCache(Context context) {deleteFilesByDirectory(context.getCacheDir());}/** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */@SuppressLint("SdCardPath")public static void cleanDatabases(Context context) {deleteFilesByDirectory(new File("/data/data/"+ context.getPackageName() + "/databases"));}/** * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param * context */@SuppressLint("SdCardPath")public static void cleanSharedPreference(Context context) {deleteFilesByDirectory(new File("/data/data/"+ context.getPackageName() + "/shared_prefs"));}/** * 按名字清除本应用数据库 * * @param context * @param dbName */public static void cleanDatabaseByName(Context context, String dbName) {context.deleteDatabase(dbName);}/** * 清除/data/data/com.xxx.xxx/files下的内容 * * @param context */public static void cleanFiles(Context context) {deleteFilesByDirectory(context.getFilesDir());}/** * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param * context */public static void cleanExternalCache(Context context) {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {deleteFilesByDirectory(context.getExternalCacheDir());}}/** * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * @param filePath */public static void cleanCustomCache(String filePath) {deleteFilesByDirectory(new File(filePath));}/** * 清除本应用所有的数据 * * @param context * @param filepath */public static void cleanApplicationData(Context context, String... filepath) {cleanInternalCache(context);cleanExternalCache(context);cleanDatabases(context);cleanSharedPreference(context);cleanFiles(context);for (String filePath : filepath) {cleanCustomCache(filePath);}}/** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */private static void deleteFilesByDirectory(File directory) {if (directory != null && directory.exists() && directory.isDirectory()) {for (File item : directory.listFiles()) {item.delete();}}}}
package com.xionghu.view;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {private Button clean_data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);clean_data = (Button) findViewById(R.id.clean_data);clean_data.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {DataCleanManager.cleanSharedPreference(MainActivity.this);/* * 其他数据清除 用 DataCleanManager */// DataCleanManager.cleanDatabases(context) 清除本应用所有数据库Toast.makeText(MainActivity.this,"清除本应用SharedPreference 成功!!!", Toast.LENGTH_SHORT).show();Toast.makeText(MainActivity.this, "再次打开本程序,发现loading页又出现了",Toast.LENGTH_SHORT).show();}});}}
资源下载链接
更多相关文章
- Android根据Data匹配隐式Intent的实例
- android 数据库操作异常
- android 数据报表
- Android Bitmap对象与byte[]相互转换
- Android 整屏截图与区域指定view或layout截屏并返回bitmap对象
- Android 下陀螺仪、加速度和磁场传感器数据定义
- Android 动态添加view或item并获取数据
- android连接数据库sqllist基础操作学习:
- Android Studio HttpURLConnection 接收 JSON 数据