Android 手机防盗软件+源代码
1、AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liu.activity"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
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=".BootCompleteReceiver">
<intent-filter>
<!-- 广播接受者对开机进行监听 -->
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="8" />
<!-- SharedPreferences权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->
</manifest>
2、BootCompleteReceiver.java:
package com.liu.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;
/**
* 广播接受者注册服务、在手机开机时,判断手机以前的IMIS码跟现在手机IMIS是否相等,如果不相等证明SIM已经被更换,则发送短信提示
*
*
*/
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取
SharedPreferences sp =context.getSharedPreferences("data", Context.MODE_WORLD_WRITEABLE);
//获取手机服务信息
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
boolean isStart = sp.getBoolean("start", false);//判断是否开始监听
if(!isStart){
return;
}else{
//获取IMIS标识
String saveSubscriberId = sp.getString("subScriberId", "");
//电话号码
String safenumber = sp.getString("safenumber", "");
//当前IMIS标示
String subscriberId = tm.getSubscriberId();
//获取短信管理器
SmsManager manager = SmsManager.getDefault();
//把短信放到List,如果超过70汉字会分割多条短信
List<String> message = manager.divideMessage("手机IMIS码:"+saveSubscriberId+"的手机,SIM已被更换,更换的IMIS码为:"+subscriberId);
for(String msg:message){
manager.sendTextMessage(safenumber, null, msg, null, null);
}
if(subscriberId.trim().equals(saveSubscriberId)){
return ;
}else{
/*
//获取短信管理器
SmsManager manager = SmsManager.getDefault();
//把短信放到List,如果超过70汉字会分割多条短信
List<String> message = manager.divideMessage("手机IMIS码:"+saveSubscriberId+"的手机,SIM已被更换,更换的IMIS码为:"+subscriberId);
for(String msg:message){
manager.sendTextMessage(safenumber, null, msg, null, null);
}*/
}
}
}
}
3、MainActivity :
import android.app.Activity;
import android.app.AlertDialog;
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;
/*
* 获取SharedPreferences
* Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND
* Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,
* Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;
* //如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
* Activity.MODE_APPEND//该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
*/
public class MainActivity extends Activity {
// 设置帐号密码对话框
private AlertDialog setPasswordDialog;
// 保存参数
private SharedPreferences sp;
// 用户登录对话框
private AlertDialog showDialog;
// 电话号码文本框
private EditText etsafenumber;
// 按钮
private Button butstart;
private Button butmodify;
// 标识
private boolean isFirst;
private boolean isStart;
// 手机基本服务
private TelephonyManager tm;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得手机基本服务
tm = (TelephonyManager)this.getSystemService(TELEPHONY_SERVICE);
//获取SharedPreferences
sp = this.getSharedPreferences("data", MODE_WORLD_READABLE);
// 判断是否是第一次登录
isFirst = sp.getBoolean("first", true);
if (isFirst) {
showPasswordDialog();
} else {
showLogin();
}
}
/**
* 用户登录
*/
public void showLogin() {
// new Builder实例
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 加载到对话框
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.showpassworddialog, null); // 渲染view
final EditText etusername = (EditText) view.findViewById(R.id.username);// 获取用户名
final EditText etpassword = (EditText) view.findViewById(R.id.password); // 获取密码
// 获取按钮
Button butok = (Button) view.findViewById(R.id.ok);
Button butcancle = (Button) view.findViewById(R.id.cancle);
// OK按钮
butok.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 用户名
String username = etusername.getText().toString();
// 密码
String password = etpassword.getText().toString();
if ("".equals(username.trim()) || "".equals(password.trim())) {
Toast.makeText(MainActivity.this, "用户名或密码不能为空", 4).show();
return;
}
// 从配置文件里面获取信息
String saveusername = sp.getString("username", "");
String savepassword = sp.getString("password", "");
if (username.trim().equals(saveusername)
&& password.trim().equals(savepassword)) {
// 初始化页面
init();
// 关闭对话框
showDialog.dismiss();
} else {
Toast.makeText(MainActivity.this, "用户名或密码错误", 4).show();
return;
}
}
});
// cancle按钮
butcancle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 关闭应用
MainActivity.this.finish();
}
});
builder.setView(view);
builder.setTitle("用户登录");
// 创建对话框
showDialog = builder.create();
// 显示
showDialog.show();
}
/**
* 加载主界面
*/
public void init() {
setContentView(R.layout.main);
// 获取电话号码
etsafenumber = (EditText) this.findViewById(R.id.safenumber);
// 获取按钮
butstart = (Button) this.findViewById(R.id.start);
butmodify = (Button) this.findViewById(R.id.modify);
// 从配置文件取出值
String savenumber = sp.getString("safenumber", "");
etsafenumber.setText(savenumber);
// 第一次进入
isStart = sp.getBoolean("start", false);
if (isStart) {
etsafenumber.setEnabled(false);// 设置不可以编辑
butmodify.setEnabled(false);
butstart.setText("停止防盗");
}
// 添加事件
butstart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (isStart) {
// 获取编辑器
Editor editor = sp.edit();
editor.putBoolean("start", false);
etsafenumber.setEnabled(true);// 设置不可以编辑
butmodify.setEnabled(true);
isStart = false;
butstart.setText("开始防盗");
editor.commit();
} else {
String phoneNumber = tm.getLine1Number();//获取本机手机号码
//IMIS唯一标识
String subScriberId = tm.getSubscriberId();
// 获取电话号码
String safenumber = etsafenumber.getText().toString();
if ("".equals(safenumber.trim())) {
Toast.makeText(MainActivity.this,"安全电话号码不能为空,请重新设置", 4).show();
return;
} else {
// 获取编辑器
Editor editor = sp.edit();
editor.putString("safenumber", safenumber);
editor.putBoolean("start", true);
isStart = true;
editor.putString("subScriberId", subScriberId);
editor.commit();
butmodify.setEnabled(false);
etsafenumber.setEnabled(false);
butstart.setText("停止防盗");
}
}
}
});
butmodify.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showPasswordDialog();
}
});
}
/**
* 显示设置密码对话框
*/
private void showPasswordDialog() {
// new Builder实例
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 加载到对话框
LayoutInflater inflater = LayoutInflater.from(this);
// 渲染view
View view = inflater.inflate(R.layout.showpassworddialog, null);
// 获取用户名
final EditText etusername = (EditText) view.findViewById(R.id.username);
// 获取密码
final EditText etpassword = (EditText) view.findViewById(R.id.password);
// 获取按钮
Button butok = (Button) view.findViewById(R.id.ok);
Button butcancle = (Button) view.findViewById(R.id.cancle);
// OK按钮
butok.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 用户名
String username = etusername.getText().toString();
// 密码
String password = etpassword.getText().toString();
if ("".equals(username.trim()) || "".equals(password.trim())) {
Toast.makeText(MainActivity.this, "用户名或密码不能为空", 4).show();
return;
}
Editor editor = sp.edit();// 获取编辑器、保留数据
editor.putString("username", username);
editor.putString("password", password);
editor.putBoolean("first", false);// 是否第一次进入
editor.commit();
setPasswordDialog.dismiss();// 关闭对话框
init();
}
});
// cancle按钮
butcancle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (isFirst) {
// 关闭应用
MainActivity.this.finish();
} else {
setPasswordDialog.dismiss();
}
}
});
builder.setView(view);
builder.setTitle("设置密码");
// 创建对话框
setPasswordDialog = builder.create();
// 显示
setPasswordDialog.show();
}
}
4、main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/safenumber"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入一个安全有效的手机号"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/start"
android:text="开始防盗"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/modify"
android:text="修改密码"
android:layout_weight="1"
/>
</LinearLayout>
</LinearLayout>
5、showpassworddialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/username"
android:hint="请输入用户名!"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:id="@+id/password"
android:hint="请输入密码!"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ok"
android:text="OK"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cancle"
android:text="CANCLE"
android:layout_weight="1"
/>
</LinearLayout>
</LinearLayout>