手机防盗

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>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值