1 一个短信广播接收者,用于安全号码控制丢失手机播放报警音乐、锁屏等
package org.heima.mobilesafe01.receiver;
import org.heima.mobilesafe01.R;
import org.heima.mobilesafe01.constants.Constants;
import org.heima.mobilesafe01.service.GPSService;
import org.heima.mobilesafe01.utils.L;
import org.heima.mobilesafe01.utils.PreferencesUtils;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.provider.MediaStore.Audio.Media;
import android.telephony.SmsMessage;
import android.text.TextUtils;
/**
* @author U 短信的接收广播
*/
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {// the main thread
// of,timeout:10
// seconds
DevicePolicyManager dpm = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName who = new ComponentName(context, AdminReceiver.class);
String safeNum = PreferencesUtils.getString(context,
Constants.SJFD_SAFE_NUM);
if (TextUtils.isEmpty(safeNum)) {
return;
}
// 怎么获取短信内容
// 短信号码
Object[] objs = (Object[]) intent.getExtras().get("pdus");
for (Object obj : objs) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
String msgBody = smsMessage.getMessageBody();// 获取短信的内容
String sender = smsMessage.getOriginatingAddress();// 获取发送号码
L.d("sender:" + sender + ";msgBody:" + msgBody);
if (!safeNum.equals(sender)) {// 当发送者不是安全号码的时候,就不处理
return;
}
// if else jdk1.6
switch (msgBody) {
case "#*music*#":
L.d("music");
MediaPlayer mp = MediaPlayer.create(context, R.raw.alarm);
mp.setVolume(1.0f, 1.0f);
mp.setLooping(true);
mp.start();
break;
case "#*location*#":
L.d("location");
// 开启一个服务
context.startService(new Intent(context, GPSService.class));
break;
case "#*lockscreen*#":
L.d("lockscreen");
if (dpm.isAdminActive(who)) {
dpm.lockNow();
dpm.resetPassword("123", 0);
}
break;
case "#*wipedata*#":
L.d("wipedata");
if (dpm.isAdminActive(who)) {
dpm.wipeData(0);
}
break;
default:
break;
}
}
}
}
2 用于定位的服务
package org.heima.mobilesafe01.service;
import org.heima.mobilesafe01.constants.Constants;
import org.heima.mobilesafe01.utils.L;
import org.heima.mobilesafe01.utils.PreferencesUtils;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.telephony.SmsManager;
import android.text.TextUtils;
/**
* @author U
* 定位的服务
*/
public class GPSService extends Service {
private LocationManager mLm;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
L.d("GPSService:onCreate");
mLm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mLm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000 * 5, 5,
new LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
double longitude = location.getLongitude();
double latitude = location.getLatitude();
// 发短信给安全号码
String safeNum = PreferencesUtils.getString(
getApplicationContext(),
Constants.SJFD_SAFE_NUM);
if(TextUtils.isEmpty(safeNum)){
return;
}
// 发短信给安全号码
SmsManager.getDefault().sendTextMessage(safeNum, null,longitude+","+latitude , null, null);
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
L.d("GPSService:onDestroy");
}
}
3 一个界面有个按钮点击激活/取消设备管理员权限的Activity
package org.heima.mobilesafe01;
import org.heima.mobilesafe01.receiver.AdminReceiver;
import org.heima.mobilesafe01.utils.ImageTextViewUtils;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ContentView;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
@ContentView(R.layout.activity_setup4)
public class SetupActivity4 extends BaseSetupActivity {
private static final int REQUESTCODE = 1001;
private DevicePolicyManager mDpm;
private ComponentName mWho;
@ViewInject(R.id.btn_admin)
private Button btnAdmin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
initData();
}
private void initView() {
ViewUtils.inject(this);
}
private void initData() {
mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mWho = new ComponentName(this, AdminReceiver.class);
initState();
}
private void initState() {
if (mDpm.isAdminActive(mWho)) {
ImageTextViewUtils.setTextViewImage(this, btnAdmin,
R.drawable.admin_activated, ImageTextViewUtils.RIGHT);
} else {
ImageTextViewUtils.setTextViewImage(this, btnAdmin,
R.drawable.admin_inactivated, ImageTextViewUtils.RIGHT);
}
}
/*
* public void pre(View view) { Intent intent = new Intent(this,
* SetupActivity3.class); startActivity(intent); finish(); }
*
* public void next(View view) { Intent intent = new Intent(this,
* SetupActivity5.class); startActivity(intent); finish(); }
*/
@Override
protected boolean performNext() {
Intent intent = new Intent(this, SetupActivity5.class);
startActivity(intent);
return false;
}
@Override
protected boolean performPre() {
Intent intent = new Intent(this, SetupActivity3.class);
startActivity(intent);
return false;
}
@OnClick(R.id.btn_admin)
public void doActivate(View view) {
if (mDpm.isAdminActive(mWho)) {
mDpm.removeActiveAdmin(mWho);
ImageTextViewUtils.setTextViewImage(this, btnAdmin,
R.drawable.admin_inactivated, ImageTextViewUtils.RIGHT);
} else {
// 假如没有激活
// 参考文档
Intent intent = new Intent();
intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mWho);// ComponentName
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"广州黑马一期,无敌就是寂寞");
startActivityForResult(intent, REQUESTCODE);
}
// RadioButton
// RadioGroup
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUESTCODE){
if(resultCode==Activity.RESULT_OK){
initState();
}
}
}
}