LostPrevent
ActivityMain
package org.wp.activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ActivityMain extends Activity {
private AlertDialog regDialog;
private AlertDialog loginDialog;
private AlertDialog modifyDialog;
private TelephonyManager telephonyManager;
private SharedPreferences sp;
private EditText main_ed_safenumber;
private Button main_bt_start;
private Button main_bt_modify;
private boolean isFirst;
private boolean isStart;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
sp = this.getSharedPreferences("data", Context.MODE_WORLD_READABLE);
isFirst = sp.getBoolean("isFirst", true);
// 是否第一次运行
if (isFirst) {
showRegDialog();
} else {
showLoginDialog();
}
}
/**
* 用户注册
*/
private void showRegDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.reg_dialog, null);
final EditText reg_ed_username = (EditText) view.findViewById(R.id.reg_ed_username);
final EditText reg_ed_password = (EditText) view.findViewById(R.id.reg_ed_password);
// 用户注册
view.findViewById(R.id.reg_bt_ok).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
String regUsername = reg_ed_username.getText().toString();
String regPassword = reg_ed_password.getText().toString();
if (regUsername.trim().equals("") || regPassword.trim().equals("")) {
Toast.makeText(ActivityMain.this, R.string.reg_null, Toast.LENGTH_SHORT).show();
return;
}
// 保存注册信息
Editor editor = sp.edit();
editor.putString("username", regUsername);
editor.putString("password", regPassword);
editor.putBoolean("isFirst", false);
editor.commit();
init();
regDialog.dismiss();
}
});
// 取消注册
view.findViewById(R.id.reg_bt_cancel).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.reg_title);
builder.setView(view);
regDialog = builder.create();
regDialog.show();
}
/**
* 用户登录
*/
private void showLoginDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.login_dialog, null);
final EditText login_ed_username = (EditText) view.findViewById(R.id.login_ed_username);
final EditText login_ed_password = (EditText) view.findViewById(R.id.login_ed_password);
// 用户登录
view.findViewById(R.id.login_bt_ok).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
String loginUsername = login_ed_username.getText().toString();
String loginPassword = login_ed_password.getText().toString();
if (loginUsername.trim().equals("") || loginPassword.trim().equals("")) {
Toast.makeText(ActivityMain.this, R.string.login_null, Toast.LENGTH_SHORT).show();
return;
}
String savedUsername = sp.getString("username", "");
String savedPassword = sp.getString("password", "");
if (loginUsername.trim().equals(savedUsername) && loginPassword.trim().equals(savedPassword)) {
init();
loginDialog.dismiss();
} else {
Toast.makeText(ActivityMain.this, R.string.login_error, Toast.LENGTH_SHORT).show();
}
}
});
// 取消登录
view.findViewById(R.id.login_bt_cancel).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.login_title);
builder.setView(view);
loginDialog = builder.create();
loginDialog.show();
}
/**
* 修改密码
*/
private void showModifyDialog() {
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.modify_dialog, null);
final EditText modify_ed_fpassword = (EditText) view.findViewById(R.id.modify_ed_fpassword);
final EditText modify_ed_spassword = (EditText) view.findViewById(R.id.modify_ed_spassword);
// 修改密码
view.findViewById(R.id.modify_bt_ok).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
String modifyFpassword = modify_ed_fpassword.getText().toString();
String modifySpassword = modify_ed_spassword.getText().toString();
if (modifyFpassword.trim().equals("") || modifySpassword.trim().equals("")) {
Toast.makeText(ActivityMain.this, R.string.modify_null, Toast.LENGTH_SHORT).show();
return;
}
if (!modifyFpassword.trim().equals(modifySpassword.trim())) {
Toast.makeText(ActivityMain.this, R.string.modify_error, Toast.LENGTH_SHORT).show();
return;
}
// 保存修改密码
Editor editor = sp.edit();
editor.putString("password", modifyFpassword);
editor.commit();
modifyDialog.dismiss();
Toast.makeText(ActivityMain.this, R.string.modify_success, Toast.LENGTH_SHORT).show();
}
});
// 取消修改
view.findViewById(R.id.modify_bt_cancel).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
modifyDialog.dismiss();
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.modify_title);
builder.setView(view);
modifyDialog = builder.create();
modifyDialog.show();
}
/**
* 初始化
*/
private void init() {
setContentView(R.layout.main);
main_ed_safenumber = (EditText) this.findViewById(R.id.main_ed_safenumber);
main_bt_start = (Button) this.findViewById(R.id.main_bt_start);
main_bt_modify = (Button) this.findViewById(R.id.main_bt_modify);
// 获得安全的手机号码
String savedSafenumber = sp.getString("safenumber", "");
main_ed_safenumber.setText(savedSafenumber);
isStart = sp.getBoolean("isStart", false);
// 是否已经开启防盗
if (isStart) {
modifyState(false);
}
// 开启关闭防盗
main_bt_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isStart) {
isStart = false;
Editor editor = sp.edit();
editor.putBoolean("isStart", false);
editor.commit();
modifyState(true);
} else {
String mainSafenumber = main_ed_safenumber.getText().toString();
if (mainSafenumber.equals("")) {
Toast.makeText(ActivityMain.this, R.string.main_safenumber_null, Toast.LENGTH_SHORT).show();
return;
} else {
/*
* 国际移动用户识别码(IMSI:InternationalMobileSubscriberIdentificationNumber)
* 是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。
*
* 其总长度不超过15位,同样使用0~9的数字。
*
* 其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;
* MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;
* MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。
*/
String subscriberId = telephonyManager.getSubscriberId();
isStart = true;
Editor editor = sp.edit();
editor.putString("subscriberid", subscriberId);
editor.putString("safenumber", mainSafenumber);
editor.putBoolean("isStart", true);
editor.commit();
modifyState(false);
}
}
}
});
// 修改密码
main_bt_modify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showModifyDialog();
}
});
}
// 开启关闭防盗
private void modifyState(boolean flag) {
if (flag) {
main_ed_safenumber.setEnabled(true);
main_bt_modify.setEnabled(true);
main_bt_start.setText(R.string.main_bt_start_str);
} else {
main_ed_safenumber.setEnabled(false);
main_bt_modify.setEnabled(false);
main_bt_start.setText(R.string.main_bt_stop_str);
}
}
}
BootCompletedReceiver
package org.wp.activity;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
/**
* 手机启动完成
*
* @author wp
*
*/
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_WORLD_READABLE);
boolean isStart = sp.getBoolean("isStart", false);
// 如果已经开启防盗
if (isStart) {
String savedSubscriberId = sp.getString("subscriberid", "");
String savedSafenumber = sp.getString("safenumber", "");
// 获得当前SIM卡的IMSI信息
String subscriberId = telephonyManager.getSubscriberId();
if (subscriberId.trim().equals(savedSubscriberId)) {
return;
} else {
SmsManager smsManager = SmsManager.getDefault();
List<String> message = smsManager.divideMessage("IMSI码为" + savedSubscriberId + "的手机,SIM卡已被更换,更换的IMSI码为"
+ subscriberId);
for (String msg : message) {
smsManager.sendTextMessage(savedSafenumber, null, msg, null, null);
}
}
}
}
}
}
SMSReceivedReceiver
package org.wp.activity;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
/**
* 接收安全手机发送的短信
*
* @author wp
*
*/
public class SMSReceivedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_WORLD_READABLE);
boolean isStart = sp.getBoolean("isStart", false);
String savedSafenumber = sp.getString("safenumber", "");
if (isStart) {
Object[] object = (Object[]) intent.getSerializableExtra("pdus");
byte[][] pdus = new byte[object.length][];
// 获得byte二位数组
for (int i = 0; i < pdus.length; i++) {
pdus[i] = (byte[]) object[i];
}
// 获得短信信息
SmsMessage[] messages = new SmsMessage[object.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu(pdus[i]);
}
// 寻找安全手机发送的短信
for (int i = 0; i < messages.length; i++) {
// 短信发送端手机号码
String oriAddress = messages[i].getDisplayOriginatingAddress();
if (oriAddress.trim().equals(savedSafenumber)) {
// 获得短信的内容
String body = messages[i].getDisplayMessageBody();
if (body.contains(context.getString(R.string.sms_identification))) {
SmsManager smsManager = SmsManager.getDefault();
List<String> message = smsManager.divideMessage("发送想要获得信息");
for (String msg : message) {
smsManager.sendTextMessage(savedSafenumber, null, msg, null, null);
}
}
}
}
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:paddingBottom="5dip"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone" android:maxLength="15" android:hint="@string/main_ed_safenumber_hint" android:id="@+id/main_ed_safenumber" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/main_bt_start_str" android:id="@+id/main_bt_start" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/main_bt_modify_str" android:id="@+id/main_bt_modify" /> </LinearLayout> </LinearLayout>
reg_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:paddingBottom="5dip"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/reg_ed_username_hint" android:id="@+id/reg_ed_username" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/reg_ed_password_hint" android:password="true" android:id="@+id/reg_ed_password" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/reg_bt_ok_str" android:id="@+id/reg_bt_ok" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/reg_bt_cancel_str" android:id="@+id/reg_bt_cancel" /> </LinearLayout> </LinearLayout>
login_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:paddingBottom="5dip"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/login_ed_username_hint" android:id="@+id/login_ed_username" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/login_ed_password_hint" android:password="true" android:id="@+id/login_ed_password" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/login_bt_ok_str" android:id="@+id/login_bt_ok" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/login_bt_cancel_str" android:id="@+id/login_bt_cancel" /> </LinearLayout> </LinearLayout>
modify_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="5dip" android:paddingBottom="5dip"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/modify_ed_fpassword_hint" android:password="true" android:id="@+id/modify_ed_fpassword" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/modify_ed_spassword_hint" android:password="true" android:id="@+id/modify_ed_spassword" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/modify_bt_ok_str" android:id="@+id/modify_bt_ok" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/modify_bt_cancel_str" android:id="@+id/modify_bt_cancel" /> </LinearLayout> </LinearLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">LostPrevent</string> <string name="sms_identification">OTOEOIOUYVL</string> <string name="reg_title">用户注册</string> <string name="reg_null">用户名或密码不得为空</string> <string name="reg_ed_username_hint">请输入用户名</string> <string name="reg_ed_password_hint">请输入密码</string> <string name="reg_bt_ok_str">OK</string> <string name="reg_bt_cancel_str">CANCEL</string> <string name="login_title">用户登录</string> <string name="login_null">用户名或密码不得为空</string> <string name="login_error">用户名或密码错误</string> <string name="login_ed_username_hint">请输入用户名</string> <string name="login_ed_password_hint">请输入密码</string> <string name="login_bt_ok_str">OK</string> <string name="login_bt_cancel_str">CANCEL</string> <string name="modify_title">修改密码</string> <string name="modify_null">密码不得为空</string> <string name="modify_error">两次输入的密码不一致</string> <string name="modify_success">密码修改成功</string> <string name="modify_ed_fpassword_hint">请输入密码</string> <string name="modify_ed_spassword_hint">请再次输入密码</string> <string name="modify_bt_ok_str">OK</string> <string name="modify_bt_cancel_str">CANCEL</string> <string name="main_safenumber_null">手机号码不得为空</string> <string name="main_ed_safenumber_hint">请输入一个安全有效的手机号码</string> <string name="main_bt_start_str">开启防盗</string> <string name="main_bt_stop_str">停止防盗</string> <string name="main_bt_modify_str">修改密码</string> </resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.wp.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".ActivityMain" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 手机启动完成--> <receiver android:name=".BootCompletedReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver> <!-- 接收到短信 --> <receiver android:name=".SMSReceivedReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-sdk android:minSdkVersion="3" /> </manifest>