int newMsgId = -1;
// long address = Long.parseLong(cur.getString(2));
// long date = Long.parseLong(cur.getString(4));
// int type = Integer.parseInt(cur.getString(9));
// String body = cur.getString(12);
int addressIndex = cur.getColumnIndex(“address”);
int dateIndex = cur.getColumnIndex(“date”);
int typeIndex = cur.getColumnIndex(“type”);
int bodyIndex = cur.getColumnIndex(“body”);
long address = Long.parseLong(cur.getString(addressIndex));
long date = Long.parseLong(cur.getString(dateIndex));
int type = Integer.parseInt(cur.getString(typeIndex));
String body = cur.getString(bodyIndex);
String phoneNum = Long.toString(address);
String name = getNameByNumber(phoneNum);
if (name != null && name.trim().length() > 0) {
MmsLockMsg newMsg = new MmsLockMsg(threadId, address, date,
type, body, name);
newMsgId = _db.addMsg(newMsg);
} else {
MmsLockMsg newMsg = new MmsLockMsg(threadId, address, date,
type, body, phoneNum);
newMsgId = _db.addMsg(newMsg);
}
// to zj DB end
} while (cur.moveToNext());
}
// delete from SystemDb start
this.getContentResolver().delete(Uri.parse(“content://sms”),
“thread_id=?”, new String[] { strId });
// delete from SystemDb end
Toast.makeText(this, com.android.mms.R.string.zj_lock_success,
Toast.LENGTH_SHORT).show();
finish();
// add for animation start
if (version > 5) {
overridePendingTransition(com.android.mms.R.anim.zj_right_in,
com.android.mms.R.anim.zj_right_out);
}
// add for animation end
}
短信收藏的代码顺便也贴一下吧,也是容易实现的,与加密相比少了一步,没有从系统数据库删掉,并且收藏只是收藏单条短信,而不是整个会话,所以接口要在短信条目长按的菜单里面添加:
case MENU_ADD_MARK:
int sms_id = (int) (mMsgItem.mMsgId);
Log.e(“SMS_ID”, “” + sms_id);
// Toast.makeText(this, “”+sms_id, 2).show();
zjSaveMark(sms_id);
return true;
public void zjSaveMark(int sms_id) {
MmsMarkMsgDbHelper _db2 = new MmsMarkMsgDbHelper(this);
// _db.onUpgrade(db, oldVersion, newVersion);
String strId = Integer.toString(sms_id);
int smsCount = 0;
try {
Cursor countCur = _db2.getAllMsgBySmsId(sms_id);
smsCount = countCur.getCount(); // zj:查看是否已经收藏
} catch (Exception e) {
// _db.onCreate(_db);
}
Log.e(“smsCount”, “” + smsCount);
if (smsCount > 0) {
Toast.makeText(this, com.android.mms.R.string.zj_already_marked,
Toast.LENGTH_SHORT).show();
} else {
// int count=0;
Uri uri = Uri.parse(“content://sms”);
// Uri uri, String[] projection, String selection,String[]
// selectionArgs, String sortOrder
String selection = “_id=?”;
String[] selectionArgs = new String[] { strId };
Cursor cur = this.managedQuery(uri, null, selection, selectionArgs,
null);
if (cur.moveToFirst()) {
do {
// to zj DB start
int newMsgId = -1;
int addressIndex = cur.getColumnIndex(“address”);
int dateIndex = cur.getColumnIndex(“date”);
int typeIndex = cur.getColumnIndex(“type”);
int bodyIndex = cur.getColumnIndex(“body”);
long address = Long.parseLong(cur.getString(addressIndex));
long date = Long.parseLong(cur.getString(dateIndex));
int type = Integer.parseInt(cur.getString(typeIndex));
String body = cur.getString(bodyIndex);
MmsMarkMsg newMsg = new MmsMarkMsg(sms_id, address, date,
type, body);
newMsgId = _db2.addMsg(newMsg);
// to zj DB end
} while (cur.moveToNext());
}
Toast.makeText(this, com.android.mms.R.string.zj_mark_success,
Toast.LENGTH_SHORT).show();
}
}
查看加密的短信需要进入到一个List,进入之前需要进行身份验证。
如果是第一次进入,之前没有设置过九宫格手势密码,就提示用户设置,第一次绘制和第二次绘制图案相同,设置手势密码成功,然后提示用户设置字符密保,用于忘记手势密码时进行重置。
验证身份页面:
/*
- ZJ add for Mms Lock
*/
package com.android.mms.ui;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.app.ActionBar; //zj add for actionBar back
public class MmsLock extends Activity {
private LinearLayout nine_con;
MmsLockSetPwd setPwd;
MmsLockCheckPwd checkPwd;
TextView showInfo;
boolean isSetFirst = false;
public int version = Integer.valueOf(android.os.Build.VERSION.SDK);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(com.android.mms.R.layout.mms_lock);
showInfo = (TextView) findViewById(com.android.mms.R.id.show_set_info);
nine_con = (LinearLayout) findViewById(com.android.mms.R.id.nine_con);
SharedPreferences shareDate = getSharedPreferences(“GUE_PWD”, 0);
String pwd = shareDate.getString(“GUE_PWD”, “HAVE NO PWD !”);
boolean is_set = shareDate.getBoolean(“IS_SET”, false);
if (is_set) {
TextView tv_forget_pwd = (TextView) findViewById(com.android.mms.R.id.zj_lock_forget_pwd);
checkPwd = new MmsLockCheckPwd(MmsLock.this);
nine_con.addView(checkPwd);
tv_forget_pwd.setVisibility(View.VISIBLE);
checkPwd();
} else {
TextView tv_forget_pwd = (TextView) findViewById(com.android.mms.R.id.zj_lock_forget_pwd);
setPwd = new MmsLockSetPwd(MmsLock.this);
nine_con.addView(setPwd);
tv_forget_pwd.setVisibility(View.GONE);
getSetPwd();
}
// zj:for action back start
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
// zj:for action bar end
}
public void checkPwd() {
showInfo.setText(com.android.mms.R.string.zj_check_pwd);
SharedPreferences shareDate = getSharedPreferences(“GUE_PWD”, 0);
}
public void getSetPwd() {
SharedPreferences shareDate = getSharedPreferences(“GUE_PWD”, 0);
isSetFirst = shareDate.getBoolean(“IS_SET_FIRST”, false);
if (!isSetFirst) {
showInfo.setText(com.android.mms.R.string.zj_set_pwd);
shareDate.edit().clear().commit();
} else {
showInfo.setText(com.android.mms.R.string.zj_confirm_pwd);
}
boolean is_second_error = shareDate.getBoolean(“SECOND_ERROR”, false);
if (is_second_error) {
showInfo.setText(com.android.mms.R.string.zj_reinput_pwd);
shareDate.edit().clear().commit();
}
}
// zj actionBar Menu start
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(com.android.mms.R.menu.mms_lock, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
// add for animation start
if (version > 5) {
overridePendingTransition(com.android.mms.R.anim.zj_right_in,
com.android.mms.R.anim.zj_right_out);
}
// add for animation end
break;
// case com.android.mms.R.id.zj_reset_pwd:
// Intent intent = new Intent(this,
// com.android.mms.ui.MmsLockResetPwd.class);
// startActivity(intent);
// break;
default:
// return super.onOptionsItemSelected(item);
break;
}
return true;
}
// zj actionBar menu end
public void zjForgetPwd(View v) {
Intent intent = new Intent(this,
com.android.mms.ui.MmsLockResetPwd.class);
startActivity(intent);
}
}
加密短信的DbHelper:
/*
- ZJ add for Mms Lock
*/
package com.android.mms.ui;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MmsLockMsgDbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 3;
private static final String DATABASE_NAME = “zj_msg”;
private static final String NOTE_TABLE_NAME = “msg”;
private static final String NOTE_COL_ID = “_id”;
private static final String NOTE_COL_THREAD_ID = “thread_id”;
private static final String NOTE_COL_ADDRESS = “address”;
private static final String NOTE_COL_DATE = “date”;
private static final String NOTE_COL_TYPE = “type”;
private static final String NOTE_COL_BODY = “body”;
private static final String NOTE_COL_NAME = “name”;
private static final String[] NOTE_COL_PROJECTION = new String[] {
NOTE_COL_ID, NOTE_COL_THREAD_ID, NOTE_COL_ADDRESS, NOTE_COL_DATE,
NOTE_COL_TYPE, NOTE_COL_BODY, NOTE_COL_NAME };
public MmsLockMsgDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Create table
@Override
public void onCreate(SQLiteDatabase db) {
String createNOTETableSql = “CREATE TABLE " + NOTE_TABLE_NAME + " (”
-
NOTE_COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
-
NOTE_COL_THREAD_ID + " INTEGER," + NOTE_COL_ADDRESS
-
" INTEGER," + NOTE_COL_DATE + " INTEGER," + NOTE_COL_TYPE
-
" INTEGER," + NOTE_COL_BODY + " TEXT," + NOTE_COL_NAME
-
" TEXT" + “);”;
db.execSQL(createNOTETableSql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + NOTE_TABLE_NAME);
// Create tables again
onCreate(db);
}
// Add new Msg
public int addMsg(MmsLockMsg Msg) {
SQLiteDatabase db = this.getWritableDatabase();
C