小白馬衛士項目總結之手機防盜

手機防盜模塊

本模塊主要實現的是一下功能:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章