前面,我们已经把手机防盗的界面搭建好了,所以现在我们要开始正式编码了,由于前面我已经详细述说了,怎么去进行手机防盗,所以现在只贴代码了,代码里有详尽的注释,项目耗时一天。好吧!我觉得我还是需要讲一下,也为自己重新整理一下思路,首先我们需要创建两个Dialog,用以进行我们的用户密码输入,因为是防盗软件,所以我们需要在软件第一次运行,就设置用户名和密码,那么怎么实现我们的软件,第一次运行就会弹出那个对话框呢?答案很简单,那就是在SharedPerferences中创建一个字段,因为SharedPerferences第一次创建,里面肯定会没有数据,所以我们可以利用这一点,通过访问SharedPerferences取得一个字段。代码如下

 

 
  
  1. /*得到SharedPreferences文件对象,如果没有则创建*/ 
  2. m_SharedPreferences = getSharedPreferences("data", MODE_WORLD_WRITEABLE); 
  3. firstLogin = m_SharedPreferences.getBoolean("first"true);//取得first值 
  4.                /*如果软件是第一次启动则弹出设置密码对话框*/ 
  5. if (firstLogin) {//判断是否第一次进入 
  6. setPasswordDialog();//软件第一次启动设置密码对话框 
  7. return
  8. }else { 
  9. loginPasswordDialog();//软件再次启动输入密码对话框 
  10. }  
  11.      

感觉这样很啰嗦了,贴上代码自己看吧,注释详尽:
 
  
  1. package com.yuxi.lostprevent; 
  2.  
  3. import android.os.Bundle; 
  4. import android.app.Activity; 
  5. import android.app.AlertDialog; 
  6. import android.content.SharedPreferences; 
  7. import android.content.SharedPreferences.Editor; 
  8. import android.telephony.TelephonyManager; 
  9. import android.view.LayoutInflater; 
  10. import android.view.Menu; 
  11. import android.view.View; 
  12. import android.view.View.OnClickListener; 
  13. import android.widget.Button; 
  14. import android.widget.EditText; 
  15. import android.widget.Toast; 
  16.  
  17. public class MainActivity extends Activity { 
  18.  
  19.     /*定义两个对话框*/ 
  20.     private AlertDialog setPasswordDialog; 
  21.     private AlertDialog loginPasswordDialog; 
  22.      
  23.     private SharedPreferences m_SharedPreferences;  //定义SharedPreferences存储数据 
  24.      
  25.     /*定义控件*/ 
  26.     private EditText et_SafeNumber; 
  27.     private Button btn_startSafe,btn_Modify; 
  28.      
  29.     boolean firstLogin; //定义对话判断 
  30.      
  31.     boolean isSafe; //定义防盗判断 
  32.      
  33.     private TelephonyManager tm; 
  34.     @Override 
  35.     protected void onCreate(Bundle savedInstanceState) { 
  36.         super.onCreate(savedInstanceState); 
  37.          
  38.         /*得到SharedPreferences文件对象,如果没有则创建*/ 
  39.         m_SharedPreferences = getSharedPreferences("data", MODE_WORLD_WRITEABLE); 
  40.         firstLogin = m_SharedPreferences.getBoolean("first"true); //取得first值 
  41.          
  42.         tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);    //得到TelephonyManager对象,用以得到IMSI码 
  43.          
  44.         /*如果软件是第一次启动则弹出设置密码对话框*/ 
  45.         if (firstLogin) {   //判断是否第一次进入 
  46.             setPasswordDialog();    //软件第一次启动设置密码对话框 
  47.             return
  48.         }else { 
  49.             loginPasswordDialog();  //软件再次启动输入密码对话框 
  50.         } 
  51.     } 
  52.  
  53.     private void loginPasswordDialog() { 
  54.         // TODO Auto-generated method stub 
  55.          
  56.         LayoutInflater inflater = getLayoutInflater();  //到LayoutInflater对象 
  57.         View view = inflater.inflate(R.layout.setandlogindialog, null); //得到setandlogindialog布局文件对象 
  58.          
  59.         /*根据控件ID取得控件对象*/ 
  60.         final EditText et_UserName = (EditText) view.findViewById(R.id.et_UserName); 
  61.         final EditText et_Password = (EditText) view.findViewById(R.id.et_Password); 
  62.          
  63.         Button btn_Ok = (Button) view.findViewById(R.id.btn_Ok); 
  64.         Button btn_cancle = (Button) view.findViewById(R.id.btn_cancle); 
  65.          
  66.         /*设置按钮属性 */ 
  67.         btn_Ok.setText("登录"); 
  68.         btn_cancle.setText("取消"); 
  69.          
  70.         /*OK按钮的点击事件*/ 
  71.         btn_Ok.setOnClickListener(new OnClickListener() { 
  72.              
  73.             @Override 
  74.             public void onClick(View v) { 
  75.                  
  76.                 /*取得输入框中的值*/ 
  77.                 String userName = et_UserName.getText().toString(); 
  78.                 String password = et_Password.getText().toString(); 
  79.                  
  80.                 /*取得m_SharedPreferences中存储的值*/ 
  81.                 String name = m_SharedPreferences.getString("userName"""); 
  82.                 String pwd = m_SharedPreferences.getString("password"""); 
  83.                  
  84.                 /*判断用户名和密码*/ 
  85.                 if (userName.trim().equals(name) && password.trim().equals(pwd)) { 
  86.                      
  87.                     init(); 
  88.                     loginPasswordDialog.dismiss();  //销毁对话框 
  89.                      
  90.                 }else { 
  91.                      
  92.                     Toast.makeText(MainActivity.this"用户名或密码错误", Toast.LENGTH_LONG).show(); 
  93.                     return
  94.                 } 
  95.             } 
  96.         }); 
  97.  
  98.         /*cancle按钮的点击事件*/ 
  99.         btn_cancle.setOnClickListener(new OnClickListener() { 
  100.              
  101.             @Override 
  102.             public void onClick(View v) { 
  103.                  
  104.                 finish();   //退出应用 
  105.             } 
  106.         }); 
  107.          
  108.         AlertDialog.Builder builder = new AlertDialog.Builder(this); 
  109.         builder.setTitle("请输入用户名和密码"); 
  110.         builder.setIcon(R.drawable.ic_launcher); 
  111.         builder.setView(view); 
  112.         loginPasswordDialog = builder.create(); 
  113.         loginPasswordDialog.show();      
  114.     } 
  115.  
  116.     private void init() 
  117.     { 
  118.         setContentView(R.layout.activity_main); 
  119.          
  120.         /*根据控件ID取得控件对象*/ 
  121.         et_SafeNumber = (EditText) findViewById(R.id.safeNumber); 
  122.         btn_startSafe = (Button) findViewById(R.id.btn_startSafe); 
  123.         btn_Modify = (Button) findViewById(R.id.btn_modify); 
  124.          
  125.         String number = m_SharedPreferences.getString("safenumber"""); 
  126.         et_SafeNumber.setText(number); 
  127.          
  128.         isSafe = m_SharedPreferences.getBoolean("safestate"false); 
  129.          
  130.         if (isSafe) { 
  131.             et_SafeNumber.setEnabled(false); 
  132.             btn_Modify.setEnabled(false); 
  133.             btn_startSafe.setText("关闭防盗"); 
  134.         } 
  135.          
  136.         btn_startSafe.setOnClickListener(new OnClickListener() { 
  137.              
  138.             @Override 
  139.             public void onClick(View v) { 
  140.                 // TODO Auto-generated method stub 
  141.                 Editor editor = m_SharedPreferences.edit(); 
  142.  
  143.                 if (isSafe) { 
  144.                     /*将信息写入SharedPreferences中*/ 
  145.                     editor.putBoolean("safestate"false); 
  146.                     editor.commit(); 
  147.                     btn_startSafe.setText("开始防盗"); 
  148.                     /*设置按钮为可见状态*/ 
  149.                     btn_Modify.setEnabled(true);     
  150.                     et_SafeNumber.setEnabled(true); 
  151.                     isSafe = false
  152.                 }else { 
  153.                      
  154.                     String numberStr = et_SafeNumber.getText().toString(); 
  155.                      
  156.                     if (numberStr.trim().equals("")) { 
  157.                         Toast.makeText(MainActivity.this"安全号码不能为空,请从新设置", Toast.LENGTH_LONG).show(); 
  158.                         return
  159.                     } 
  160.                     else { 
  161.                         //IMSI信息 
  162.                         String subScribeerID = tm.getSubscriberId(); 
  163.                          
  164.                         /*将信息写入SharedPreferences中*/ 
  165.                         editor.putString("safenumber", numberStr); 
  166.                         isSafe = true
  167.                         editor.putBoolean("safestate", isSafe); 
  168.                         editor.putString("subscriberrid", subScribeerID); 
  169.                         editor.commit();     
  170.                         /*设置按钮为不可见状态*/ 
  171.                         btn_Modify.setEnabled(false); 
  172.                         et_SafeNumber.setEnabled(false); 
  173.                          
  174.                         btn_startSafe.setText("停止防盗");  //设置按钮显示文本属性 
  175.                     } 
  176.                 } 
  177.             } 
  178.         }); 
  179.          
  180.         btn_Modify.setOnClickListener(new OnClickListener() { 
  181.              
  182.             @Override 
  183.             public void onClick(View v) { 
  184.                 // TODO Auto-generated method stub 
  185.                 setPasswordDialog(); 
  186.             } 
  187.         }); 
  188.     } 
  189.      
  190.      
  191.      
  192.     private void setPasswordDialog() { 
  193.         // TODO Auto-generated method stub 
  194.          
  195.          
  196.         LayoutInflater inflater = getLayoutInflater();  //到LayoutInflater对象 
  197.         View view = inflater.inflate(R.layout.setandlogindialog, null); //得到setandlogindialog布局文件对象 
  198.          
  199.         /*根据控件ID取得控件对象*/ 
  200.         final EditText et_UserName = (EditText) view.findViewById(R.id.et_UserName); 
  201.         final EditText et_Password = (EditText) view.findViewById(R.id.et_Password); 
  202.          
  203.         Button btn_Ok = (Button) view.findViewById(R.id.btn_Ok); 
  204.         Button btn_cancle = (Button) view.findViewById(R.id.btn_cancle); 
  205.          
  206.         /*设置按钮属性*/ 
  207.          btn_Ok.setText("设置"); 
  208.          btn_cancle.setText("取消"); 
  209.          
  210.         /*OK按钮的点击事件*/ 
  211.         btn_Ok.setOnClickListener(new OnClickListener() { 
  212.              
  213.             @Override 
  214.             public void onClick(View v) { 
  215.                  
  216.                 /*取得输入框中的值*/ 
  217.                 String userName = et_UserName.getText().toString(); 
  218.                 String password = et_Password.getText().toString(); 
  219.                  
  220.                 /*判断用户名和密码是否为空*/ 
  221.                 if (userName.trim().equals("") && password.trim().equals("")) { 
  222.                      
  223.                     Toast.makeText(MainActivity.this"请输入用户名和密码", Toast.LENGTH_LONG).show(); 
  224.  
  225.                 }else { 
  226.                     /*将信息写入SharedPreferences中*/ 
  227.                     Editor editor = m_SharedPreferences.edit(); 
  228.                     editor.putString("userName", userName); 
  229.                     editor.putString("password", password); 
  230.                     editor.putBoolean("first"false); 
  231.                     editor.commit(); 
  232.                     /*销毁对话框,进入主界面*/ 
  233.                     setPasswordDialog.dismiss();     
  234.                     init(); 
  235.                 } 
  236.             } 
  237.         }); 
  238.  
  239.         /*cancle按钮的点击事件*/ 
  240.         btn_cancle.setOnClickListener(new OnClickListener() { 
  241.              
  242.             @Override 
  243.             public void onClick(View v) { 
  244.                 /*判断软件是否是第一次进入软件,第一次进入按取消按钮则退出软件,不是则销毁对话框*/ 
  245.                 if (firstLogin) {    
  246.                     finish(); 
  247.                 }else { 
  248.                     setPasswordDialog.dismiss(); 
  249.                 } 
  250.                  
  251.             } 
  252.         }); 
  253.          
  254.         AlertDialog.Builder builder = new AlertDialog.Builder(this);    //创建一个对话 
  255.         builder.setTitle("请设置用户名和密码");                          //设置标题 
  256.         builder.setIcon(R.drawable.ic_launcher);                        //设置ICon  
  257.         builder.setView(view);                                          //设置显示的布局 
  258.         setPasswordDialog = builder.create();                           //创建对话框 
  259.         setPasswordDialog.show();                                       //显示对话框 
  260.     } 
  261.  
  262.     @Override 
  263.     public boolean onCreateOptionsMenu(Menu menu) { 
  264.         // Inflate the menu; this adds items to the action bar if it is present. 
  265.         getMenuInflater().inflate(R.menu.main, menu); 
  266.         return true
  267.     } 
  268.