android 版本更新 同時清除舊版本數據

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來存放View
	private ArrayList<View> views;

	// 定義各個界面View對象
	private View view1, view2, view3, view4, view5;

	// 定義開始按鈕對象
	private ImageView startBt;
	// 是否是第一次使用
	private boolean isFirstUse;

	private int old_install_Code, current_versionCode;

	@Override
	protected 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);

		// 實例化ViewPager
		viewPager = (ViewPager) findViewById(R.id.viewpager);

		// 實例化ArrayList對象
		views = new ArrayList<View>();

		// 實例化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() {
			@Override
			public void onClick(View v) {
				startbutton();
			}
		});
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {

	}

	@Override
	public 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);  
    } 
}


3.DataCleanManager.java用來 清除舊版本數據 引用來源

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();
			}
		}
	}
}


DataCleanManager.java 使用

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;

	@Override
	protected 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() {

			@Override
			public 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();
			}
		});
	}

}

資源下載鏈接



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章