手机防盗模块
本模块主要实现的是一下功能:
1、sim卡变更报警
2、GPS追踪
3、远程销毁数据
4、远程锁屏
首先看一下手机防盗的设置步骤及流程:
当第一次点击手机防盗的时候,会弹出一个对话框,需要你给它设置密码:
然后点击确定后再次点击的时候会弹出一个对话框,让你输入新设置的密码:
然后点击确定之后,就会跳转到设置向导,进行设置:
点击下一步就行了:
如果想要远程锁屏的话,可以点击激活后可以远程锁屏这个,然后激活一下就可以了!设置完成后就进入到主界面了!
其中主要的实现代码是这样的,上面也有详细的注释,值得说明的是,密码的保存我是通过SharedPreferences来完成的,当第二次进入的
时候,它通过存放的boolean类型的状态判断一下是不是第一次设置,如果是第一次设置的话,就进行设置密码,如果不是第一次设置的话就
进行输入你设置的密码!
恩~~ 以下就是本模块流程的主要代码:
package cn.cbd.mobilesafe.activity;
import cn.cbd.mobilesafe.activity.util.MD5Util;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class SettingCheckPasswordActivity extends Activity implements OnClickListener {
private EditText et_first_entry_pwd; //第一次进入对话框里面的文本框
private EditText et_first_entry_pwd_confirm; //这是第二次的
private Button bt_first_entry_ok; //第一次进入的对话框的确定按钮
private Button bt_first_entry_cancle; //对话框的取消按钮
private EditText et_normal_entry_pwd;
private Button bt_normal_entry_ok;
private Button bt_normal_entry_cancle;
private SharedPreferences ps; //共享数据用来存放是否设置的状态与密码等数据的
private AlertDialog dialog;
private TextView tv_lostfind_number;
private ImageView iv_lostfind_status;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ps=getSharedPreferences("config",Context.MODE_PRIVATE);
if(!isSetupPassword())//第一次进入保存密码
{
showFirstNormalDialog();
}
else //第二次进入显示第二个对话框再次输入保存后的密码
{
showFirstEntryDialog();
}
}
private void showFirstNormalDialog() { //第二次进入的时候要显示的对话框
AlertDialog.Builder builder=new Builder(this);
//这个view得话是用来装饰这个对话框的
View view=View.inflate(this, R.layout.layout_normal_dialog,null);
et_normal_entry_pwd=(EditText) view.findViewById(R.id.et_normal_entry_pwd);
bt_normal_entry_ok=(Button) view.findViewById(R.id.bt_normal_entry_ok);
bt_normal_entry_cancle=(Button) view.findViewById(R.id.bt_normal_entry_cancle);
bt_normal_entry_ok.setOnClickListener(this);
bt_normal_entry_cancle.setOnClickListener(this);
dialog=builder.create();
dialog.setView(view, 0, 0, 0, 0);
dialog.show();
}
private void showFirstEntryDialog() { //第一次进入现实的对话框
AlertDialog.Builder builder=new Builder(this);
View view=View.inflate(this, R.layout.layout_first_dialog,null);
et_first_entry_pwd=(EditText) view.findViewById(R.id.et_first_entry_pwd);
et_first_entry_pwd_confirm=(EditText) view.findViewById(R.id.et_first_entry_pwd_confirm);
bt_first_entry_ok=(Button) view.findViewById(R.id.bt_first_entry_ok);
bt_first_entry_cancle=(Button) view.findViewById(R.id.bt_first_entry_cancle);
bt_first_entry_ok.setOnClickListener(this);
bt_first_entry_cancle.setOnClickListener(this);
dialog=builder.create();
dialog.setView(view, 0, 0, 0, 0);
dialog.show();
}
public void onClick(View v) { //监听的方法
switch(v.getId())
{
case R.id.bt_first_entry_ok : //点击的第一个对话框的确定
String pwd=et_first_entry_pwd.getText().toString();
String pwd_confirm=et_first_entry_pwd_confirm.getText().toString();
if(TextUtils.isEmpty(pwd) || TextUtils.isEmpty(pwd_confirm))
{
Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
return;
}
if(!pwd.equals(pwd_confirm))
{
Toast.makeText(this, "两次密码不一致", Toast.LENGTH_SHORT).show();
return;
}
else
{
//保存密码
Editor edit=ps.edit(); //将密码保存到sharedPrefrences里面
edit.putString("password",MD5Util.ecode(pwd)); //对密码进行md5加密
edit.commit(); //提交
dialog.dismiss(); //然后关闭第一个对话框
finish();
}
break;
case R.id.bt_first_entry_cancle :
dialog.dismiss();
finish();
break;
case R.id.bt_normal_entry_ok : //第二个对话框的确定按钮
String entry_pwd=et_normal_entry_pwd.getText().toString();
if(TextUtils.isEmpty(entry_pwd))
{
Toast.makeText(this, "密码不能为空", Toast.LENGTH_SHORT).show();
return;
}
String savePwd=ps.getString("password","");
if(!savePwd.equals(MD5Util.ecode(entry_pwd)))
{
Toast.makeText(this, "密码不正确", Toast.LENGTH_SHORT).show();
return;
}
else
{
//进入主界面
//判断用户是否设置了向导,如果已设置向导,进入主界面
//这是根据sharedPrefrences存放的标志来判断的!
if(isSetupWizard())
{
//判断用户是否设置了向导,如果设置了向导,进入主界面
Log.i("SettingCheckPasswordActivity", "进入主界面");
setContentView(R.layout.mobile_fangdao_page);
tv_lostfind_number=(TextView) findViewById(R.id.tv_lostfind_number);
iv_lostfind_status=(ImageView) findViewById(R.id.iv_lostfind_status);
tv_lostfind_number.setText(ps.getString("safeMobleNumber", ""));
boolean protecting=ps.getBoolean("protecting", false); //获取绑定到sim卡的状态
if(protecting)
{ //上锁状态
iv_lostfind_status.setImageResource(R.drawable.lock);
}
else
{ //开锁状态
iv_lostfind_status.setImageResource(R.drawable.unlock);
}
}
else
{
Log.i("SettingCheckPasswordActivity", "进入设置向导界面");
//如果未设置向导,进入设置向导界面
Intent intent=new Intent(this,SetupWizardOneActivity.class);
startActivity(intent);
finish();
}
//关闭对话框
dialog.dismiss();
}
break;
case R.id.bt_normal_entry_cancle :
dialog.dismiss();
finish();
break;
}
}
private boolean isSetupPassword() {
String password=ps.getString("password", "");
return TextUtils.isEmpty(password);
}
public boolean onCreateOptionsMenu(Menu menu) { //这个是点击menu的时候弹出来的菜单
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.update_set_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) { //这个是点击菜单的事件
switch(item.getItemId())
{
case R.id.item_change_name : //如果点击对话框的确定的话
//弹出一个对话框 修改名称
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("修改名称");
final EditText et = new EditText(this);
et.setHint("请输入新的名称");
builder.setView(et);
//当点击确定的时候会执行这个onClick方法
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = et.getText().toString().trim();
Editor editor = ps.edit();
editor.putString("name", name);
editor.commit();
}
});
builder.show();
}
return super.onOptionsItemSelected(item);
}
/**
* 是否设置过防盗向导 true表示已设置向导,false表示未设置向导致
* @return
*/
public boolean isSetupWizard()
{
return ps.getBoolean("isSetupWizard", false);
}
/**如果点击了重新设置向导TextView,则执行该方法
*
* @param v
*/
public void reEntrySetup(View v)
{
Intent intent =new Intent(this,SetupWizardOneActivity.class);
startActivity(intent);
finish();
}
}
还有就是,这个上面的功能的话,需要广播与服务!这会在手机防盗功能的实现这一贴将会总结!