Android 短信加密,联系人字母侧边栏定位,Android开发必会技术

本文介绍了Android应用中如何实现短信加密和收藏功能。通过遍历系统数据库获取短信,将内容加密存储到自定义数据库,并提供身份验证以访问加密信息。同时,展示了收藏短信的实现,只需将短信数据保存到另一个数据库,但不从系统数据库删除。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值