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);
}
}
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;
@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();
}
});
}
}
资源下载链接