1. 在res下xml中描述设置的界面 preferences.xml
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="缓存设置">
<CheckBoxPreference
android:title="显示应用图标"
android:key="isShowIcon"
android:summary="是否在列表中显示图标"
android:defaultValue="true" />
<CheckBoxPreference
android:title="保存应用图标"
android:key="isSaveIcon"
android:summary="是否将应用图标保存到SD卡中"
android:defaultValue="true" />
</PreferenceCategory>
<PreferenceCategory
android:title="缓存清理">
<PreferenceScreen
android:title="缓存清理"
android:key="cleanData"
android:summary="清理安装包" />
</PreferenceCategory>
</PreferenceScreen>
二、简单介绍下,SQLite在Android中的应用
① 先写一个类 DBAdapter.java
② 在DBAdapter这个类中写一个内部类DBHelper ,让其继承SQLiteOpenHelper
③ 在DBAdapter中利用DBHelper 来写执行sql语句的方法
public class DBAdapter {
private static final String DATABASE_NAME = "xxx.db";
private static final int DBVERSION = 2;
private DBHelper dbHelper;
private final Context _context;
private SQLiteDatabase _db;
// 建表语句
private static final String DOWNLOAD_SQL = "create table download (_id integer primary key autoincrement, "
+ "softId integer, " // 软件ID
+ "name text, " // 软件名称
+ "_package text, " // 软件包名
+ "version text, " // 版本
+ "spath text, " // 保存路径
+ "durl text, " // 下载路径
+ "iurl text, " // 保留信息
+ "status integer, " // 状态
+ "dsize integer, " // 下载大小
+ "ssize text, " // 文字大小
+ "size text" // 总大小
+ ");";
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) { // 上下文,数据库名,游标工厂(null代表使用默认的),版本号
super(context, DATABASE_NAME, null, DBVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { // 如果没有数据表,会执行此方法
db.execSQL(DOWNLOAD_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 如果版本号已更新,会执行此方法
db.execSQL("DROP TABLE IF EXISTS download");
onCreate(db);
}
}
// 构造方法
public DBAdapter(Context context) {
_context = context;
dbHelper = new DBHelper(_context);
_db = dbHelper.getWritableDatabase();
}
public void execSQL(String sql) {
_db.execSQL(sql);
}
public void execSQL(String sql, Object[] bindArgs) {
_db.execSQL(sql, bindArgs);
}
public long insert(String table, String nullColumnHack, ContentValues values) {
return _db.insert(table, nullColumnHack, values);
}
public Cursor rawQuery(String sql, String[] bindArgs) {
return _db.rawQuery(sql, bindArgs);
}
public void close() {
_db.close();
}
public SQLiteDatabase getDatabase() {
return _db;
}
}
三、回到设置界面的点击事件 ActivitySetting
public class ActivitySetting extends PreferenceActivity implements
OnPreferenceChangeListener, OnPreferenceClickListener {
private ProgressDialog dialog;
private PreferenceScreen preferenceScreen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 导入preferences.xml (设置界面的布局文件)
addPreferencesFromResource(R.xml.preferences);
// 保存数据,使用的是XML文件的名称 如果是要拿到复选框中的值,直接像获得首选项方式里的值一样的拿,(复选框选中了,就会变成true,存放到xml文件中)
getPreferenceManager().setSharedPreferencesName(Config.NAME);
// 找到要点击的key值
preferenceScreen = (PreferenceScreen) findPreference("cleanData");
preferenceScreen.setOnPreferenceClickListener(this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
dialog();
return true;
}
/**
* 清理缓存对话框
*/
private void dialog() {
AlertDialog.Builder builder = new Builder(ActivitySetting.this);
builder.setMessage("确定要清理所有缓存吗?");
builder.setTitle("提示");
builder.setPositiveButton("确认",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
cleanData();
}
});
builder.setNegativeButton("取消",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
dialog.dismiss();
Toast.makeText(ActivitySetting.this, "清理完毕", Toast.LENGTH_SHORT)
.show();
}
};
/**
* 清理缓存 分为两部分:① 存放在数据库中的 ② 存放在文件夹中的
*/
private void cleanData() {
showDialog(null, "清理中...", null, null, false, null, null);
new DBAdapter(this).execSQL("delete from download");
new Thread() {
@Override
public void run() {
File file1 = new File(MarketConstants.SDCARD + "icon");
if (file1.exists() && file1.isDirectory()) {
String[] array1 = file1.list();
for (String string : array1) {
new File(MarketConstants.SDCARD + "icon/" + string)
.delete();
}
}
File file2 = new File(MarketConstants.SDCARD + "soft");
if (file2.exists() && file2.isDirectory()) {
String[] array2 = file2.list();
for (String string : array2) {
new File(MarketConstants.SDCARD + "soft/" + string)
.delete();
}
}
handler.sendEmptyMessage(1);
}
}.start();
}
/**
* 清理缓存进度条
* @param title
* @param content
* @param okText
* @param cancleText
* @param cancelable
* @param btnCancle
* @param btnOk
*/
public void showDialog(String title, String content, String okText,
String cancleText, boolean cancelable, OnCancelListener btnCancle,
OnClickListener btnOk) {
dialog = new ProgressDialog(this);
dialog.setTitle(title);
dialog.setMessage(content);
dialog.setCancelable(cancelable);
dialog.show();
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return false;
}
}