好啦,我們之前已經把設置向導的界麵已經全部完成的了,而且界麵也已經完成了三個的啦,今天我們把最後的一個界麵完成它,還有把防盜的邏輯也完成一下
廢話不多說,直接上代碼
com.xiaobin.security.ui.SetupGuide4Activity
-
package com.xiaobin.security.ui;
-
-
import android.app.Activity;
-
import android.app.AlertDialog;
-
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.view.View;
-
import android.view.View.OnClickListener;
-
import android.widget.Button;
-
import android.widget.CheckBox;
-
import android.widget.CompoundButton;
-
import android.widget.CompoundButton.OnCheckedChangeListener;
-
-
import com.xiaobin.security.R;
-
-
public class SetupGuide4Activity extends Activity implements OnClickListener
-
{
-
private Button bt_pervious;
-
private Button bt_finish;
-
private CheckBox cb_protected;
-
private SharedPreferences sp;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState)
-
{
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.setup_guide4);
-
-
bt_pervious = (Button) findViewById(R.id.bt_guide_pervious);
-
bt_finish = (Button) findViewById(R.id.bt_guide_finish);
-
bt_finish.setOnClickListener(this);
-
bt_pervious.setOnClickListener(this);
-
-
cb_protected = (CheckBox) findViewById(R.id.cb_guide_protected);
-
-
sp = getSharedPreferences("config", Context.MODE_PRIVATE);
-
boolean isProtecting = sp.getBoolean("isProtected", false);
-
if(isProtecting)
-
{
-
cb_protected.setText("已經開啟保護");
-
cb_protected.setChecked(true);
-
}
-
-
cb_protected.setOnCheckedChangeListener(new OnCheckedChangeListener()
-
{
-
@Override
-
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
-
{
-
if(isChecked)
-
{
-
cb_protected.setText("已經開啟保護");
-
Editor editor = sp.edit();
-
editor.putBoolean("isProtected", true);
-
editor.commit();
-
}
-
else
-
{
-
cb_protected.setText("沒有開啟保護");
-
Editor editor = sp.edit();
-
editor.putBoolean("isProtected", false);
-
editor.commit();
-
}
-
}
-
});
-
}
-
-
@Override
-
public void onClick(View v)
-
{
-
switch(v.getId())
-
{
-
case R.id.bt_guide_finish :
-
if(cb_protected.isChecked())
-
{
-
Editor editor = sp.edit();
-
editor.putBoolean("setupGuide", true);//記錄是否已經進行過設置向導了
-
editor.commit();
-
finish();
-
}
-
else
-
{
-
AlertDialog.Builder builder = new AlertDialog.Builder(this);
-
builder.setTitle("提醒");
-
builder.setMessage("強烈建議您開啟保護, 是否完成設置");
-
builder.setCancelable(false);
-
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
-
{
-
@Override
-
public void onClick(DialogInterface dialog, int which)
-
{
-
Editor editor = sp.edit();
-
editor.putBoolean("setupGuide", true);//記錄是否已經進行過設置向導了
-
editor.commit();
-
finish();
-
}
-
});
-
builder.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener()
-
{
-
@Override
-
public void onClick(DialogInterface dialog, int which)
-
{
-
Editor editor = sp.edit();
-
editor.putBoolean("setupGuide", true);//記錄是否已經進行過設置向導了
-
editor.commit();
-
}
-
});
-
builder.create().show();
-
}
-
break;
-
-
case R.id.bt_guide_pervious :
-
Intent intent = new Intent(this, SetupGuide3Activity.class);
-
finish();
-
startActivity(intent);
-
//這個是定義activity切換時的動畫效果的
-
overridePendingTransition(R.anim.alpha_in, R.anim.alpha_out);
-
break;
-
-
default :
-
break;
-
}
-
}
-
-
}
-
複製代碼
好啦,就這個樣子,我們的設置向導就全部完成的啦,現在我們就要來寫完我們的防盜主界麵啦,lost_protected.xml
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:andro
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="vertical" >
-
-
<TextView
-
android:
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:layout_marginTop="5dip"
-
android:text="@string/lostProtectedNumber"
-
android:textSize="20sp"/>
-
-
<View
-
/>
-
-
<CheckBox
-
android:
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="@string/isProtected"
-
android:textSize="20sp"/>
-
-
<View
-
/>
-
-
<TextView
-
android:
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/rePlayGuide"
-
android:textSize="20sp"/>
-
-
</LinearLayout>
-
複製代碼
com.xiaobin.security.ui.LostProtectedActivit
-
package com.xiaobin.security.ui;
-
-
import android.app.Activity;
-
import android.app.Dialog;
-
import android.content.Context;
-
import android.content.Intent;
-
import android.content.SharedPreferences;
-
import android.content.SharedPreferences.Editor;
-
import android.os.Bundle;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.widget.Button;
-
import android.widget.CheckBox;
-
import android.widget.CompoundButton;
-
import android.widget.EditText;
-
import android.widget.TextView;
-
import android.widget.Toast;
-
import android.widget.CompoundButton.OnCheckedChangeListener;
-
-
import com.xiaobin.security.R;
-
import com.xiaobin.security.utils.MD5Encoder;
-
-
public class LostProtectedActivity extends Activity implements OnClickListener
-
{
-
private SharedPreferences sp;
-
private Dialog dialog;
-
private EditText password;
-
private EditText confirmPassword;
-
private TextView tv_protectedNumber;
-
private TextView tv_protectedGuide;
-
private CheckBox cb_isProtected;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState)
-
{
-
super.onCreate(savedInstanceState);
-
-
sp = getSharedPreferences("config", Context.MODE_PRIVATE);
-
-
if(isSetPassword())
-
{
-
showLoginDialog();
-
}
-
else
-
{
-
showFirstDialog();
-
}
-
}
-
-
private void showLoginDialog()
-
{
-
dialog = new Dialog(this, R.style.MyDialog);
-
View view = View.inflate(this, R.layout.login_dialog, null);
-
password = (EditText) view.findViewById(R.id.et_protected_password);
-
Button yes = (Button) view.findViewById(R.id.bt_protected_login_yes);
-
Button cancel = (Button) view.findViewById(R.id.bt_protected_login_no);
-
yes.setOnClickListener(this);
-
cancel.setOnClickListener(this);
-
dialog.setContentView(view);
-
dialog.setCancelable(false);
-
dialog.show();
-
}
-
-
private void showFirstDialog()
-
{
-
dialog = new Dialog(this, R.style.MyDialog);
-
//dialog.setContentView(R.layout.first_dialog);
-
View view = View.inflate(this, R.layout.first_dialog, null);//這種填充布局的方式比較方便,峭用拿到一個LayoutInflate對象
-
password = (EditText) view.findViewById(R.id.et_protected_first_password);
-
confirmPassword = (EditText) view.findViewById(R.id.et_protected_confirm_password);
-
Button yes = (Button) view.findViewById(R.id.bt_protected_first_yes);
-
Button cancel = (Button) view.findViewById(R.id.bt_protected_first_no);
-
yes.setOnClickListener(this);
-
cancel.setOnClickListener(this);
-
dialog.setContentView(view);
-
dialog.setCancelable(false);
-
dialog.show();
-
}
-
-
private boolean isSetPassword()
-
{
-
String pwd = sp.getString("password", "");
-
if(pwd.equals("") || pwd == null)
-
{
-
return false;
-
}
-
return true;
-
}
-
-
private boolean isSetupGuide()
-
{
-
return sp.getBoolean("setupGuide", false);
-
}
-
-
@Override
-
public void onClick(View v)
-
{
-
switch(v.getId())
-
{
-
case R.id.bt_protected_first_yes :
-
String fp = password.getText().toString().trim();
-
String cp = confirmPassword.getText().toString().trim();
-
if(fp.equals("") || cp.equals(""))
-
{
-
Toast.makeText(this, "密碼不能為空", Toast.LENGTH_SHORT).show();
-
return;
-
}
-
else
-
{
-
if(fp.equals(cp))
-
{
-
Editor editor = sp.edit();
-
editor.putString("password", MD5Encoder.encode(fp));
-
editor.commit();
-
dialog.dismiss();
-
-
if(!isSetupGuide())
-
{
-
finish();
-
Intent intent = new Intent(this, SetupGuide1Activity.class);
-
startActivity(intent);
-
}
-
}
-
else
-
{
-
Toast.makeText(this, "兩次密碼不相同", Toast.LENGTH_SHORT).show();
-
return;
-
}
-
}
-
dialog.dismiss();
-
break;
-
-
case R.id.bt_protected_first_no :
-
dialog.dismiss();
-
finish();
-
break;
-
-
case R.id.bt_protected_login_yes :
-
String pwd = password.getText().toString().toString();
-
if(pwd.equals(""))
-
{
-
Toast.makeText(this, "請輸入密碼", Toast.LENGTH_SHORT).show();
-
}
-
else
-
{
-
String str = sp.getString("password", "");
-
if(MD5Encoder.encode(pwd).equals(str))
-
{
-
if(isSetupGuide())
-
{
-
setContentView(R.layout.lost_protected);
-
tv_protectedNumber = (TextView) findViewById(R.id.tv_lost_protected_number);
-
tv_protectedGuide = (TextView) findViewById(R.id.tv_lost_protected_guide);
-
cb_isProtected = (CheckBox) findViewById(R.id.cb_lost_protected_isProtected);
-
-
tv_protectedNumber.setText("手機安全號碼為:" + sp.getString("number", ""));
-
tv_protectedGuide.setOnClickListener(this);
-
-
boolean isProtecting = sp.getBoolean("isProtected", false);
-
if(isProtecting)
-
{
-
cb_isProtected.setText("已經開啟保護");
-
cb_isProtected.setChecked(true);
-
}
-
-
cb_isProtected.setOnCheckedChangeListener(new OnCheckedChangeListener()
-
{
-
@Override
-
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
-
{
-
if(isChecked)
-
{
-
cb_isProtected.setText("已經開啟保護");
-
Editor editor = sp.edit();
-
editor.putBoolean("isProtected", true);
-
editor.commit();
-
}
-
else
-
{
-
cb_isProtected.setText("沒有開啟保護");
-
Editor editor = sp.edit();
-
editor.putBoolean("isProtected", false);
-
editor.commit();
-
}
-
}
-
});
-
}
-
dialog.dismiss();
-
}
-
else
-
{
-
Toast.makeText(this, "密碼錯誤", Toast.LENGTH_SHORT).show();
-
}
-
}
-
break;
-
-
case R.id.bt_protected_login_no :
-
dialog.dismiss();
-
finish();
-
break;
-
-
case R.id.tv_lost_protected_guide : //重新進入設置向導
-
finish();
-
Intent setupGuideIntent = new Intent(this, SetupGuide1Activity.class);
-
startActivity(setupGuideIntent);
-
break;
-
-
default :
-
break;
-
}
-
}
-
-
}
-
複製代碼
-
com.xiaobin.security.ui.<span >SetupGuide2Activity </span>
複製代碼
好啦,到現在為止,我們的手機防盜這個功能的界麵就基本上完成的啦,那麼現在就進入我們的重頭戲啦,就是防盜邏輯的完成啦,我們現在的防盜是這樣的,手機丟失的時候,小偷肯定是會換sim卡的嘛,所以就要重啟啦,那我們就在啟動完成之後,比較一下現在的sim卡,是不是我們之前設置保護的sim卡,如果不是,那就發送一條短信到已經設置了的安全號碼那裏。所以現在我們隻要寫一個廣播接收者,把手機重啟的廣播接收到,然後再起進行判斷就行啦好啦,現在直接上代碼com.xiaobin.security.receiver.BootCompleteReceiver
-
package com.xiaobin.security.receiver;
-
-
import android.content.BroadcastReceiver;
-
import android.content.Context;
-
import android.content.Intent;
-
import android.content.SharedPreferences;
-
import android.telephony.SmsManager;
-
import android.telephony.TelephonyManager;
-
-
public class BootCompleteReceiver extends BroadcastReceiver
-
{
-
private SharedPreferences sp;
-
-
@Override
-
public void onReceive(Context context, Intent intent)
-
{
-
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
-
boolean isProtected = sp.getBoolean("isProtected", false);
-
//看看是不是開啟了保護
-
if(isProtected)
-
{
-
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-
//開機後,拿到當前sim卡的標識,與我們之前存放的標識對比
-
String currentSim = telephonyManager.getSimSerialNumber();
-
String protectedSim = sp.getString("simSerial", "");
-
if(!currentSim.equals(protectedSim))
-
{
-
//拿到一個短信的管理器,要注意不要導錯包,是在android.telephony下的
-
SmsManager smsManager = SmsManager.getDefault();
-
String number = sp.getString("number", "");
-
//發送短信,有5個參數,第一個是要發送到的地址,第二個是發送人,可以設置為null,第三個是要發送的信息,第四個是發送狀態,第五個是發送後的,都可以置為null
-
smsManager.sendTextMessage(number, null, "Sim卡已經變更了,手機可能被盜", null, null);
-
}
-
}
-
}
-
-
}
-
複製代碼
好啦,現在我們就要在AndroidManifest文件裏麵注冊這個廣播接收者啦
-
<receiver
-
android:name="com.xiaobin.security.receiver.BootCompleteReceiver">
-
<intent-filter android:priority="1000">
-
<action android:name="android.intent.action.BOOT_COMPLETED"/><!-- 這個是開機完成後的廣播 -->
-
</intent-filter>
-
</receiver>
複製代碼
當然,現在還不行的,我們還要把相應的權限加上
-
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-
<uses-permission android:name="android.permission.SEND_SMS"/>
複製代碼
好啦,現在我們的邏輯就基本上完成的啦但現在這個功能還不是很完整,所以我們後續的課程將會繼續完善這個防盜的功能的,比如加入gps定位啦,這些的。 好,今天的代碼就到這裏了,如果有什麼不明白的,和指導的,歡迎留言!,明天將會完善這個防盜功能,加入gps! Security_09防盜邏輯以及設置向導的完成.rar (233.32
KB, 下載次數: 50)
|