手機防盜模塊
本模塊主要實現的是一下功能:
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();
}
}
還有就是,這個上面的功能的話,需要廣播與服務!這會在手機防盜功能的實現這一貼將會總結!