浅析Android手机卫士之手机实现短信指令获取位置
推荐阅读:
浅析Android手机卫士sim卡绑定
深入浅析Android手机卫士保存密码时进行md5加密
详解Android手机卫士设置向导页面
浅析Android手机卫士关闭自动更新
浅析Android手机卫士自定义控件的属性
浅析Android手机卫士读取联系人
浅析Android手机卫士接收短信指令执行相应操作
浅析Android手机卫士手机定位的原理
获取位置
新建一个service的包
新建一个GPSService类继承系统的Service类
清单文件中注册一下
重写onCreate()方法,服务创建的时候回调
重写onDestroy()方法,服务销毁的时候回调
把上一节的代码拿到这个地方来
得到用户移动后的最后一次的位置,保存到SP中
转换标准坐标为火星坐标,数据库文件放到assets目录下,把ModifyOffset.java放在service包下面
获取ModifyOffset对象,通过ModifyOffset.getInstance()方法,参数:输入流;把资产目录下的文件转成输入流,使用getAssets().open(“文件名”)得到InputStream对象,
调用ModifyOffset对象的s2c()方法,把标准的转成中国的得到新的PointDouble对象,参数:PointDouble对象,x,y
获取到经度PonitDouble对象的y
获取到纬度PonitDouble对象的x
把位置数据保存到SP中
接收指令发送位置短信
启动服务,在接收短信的地方,获取到Intent对象,调用Context对象的startService()方法
获取到SP中保存的位置信息
发送短信,SmsManager.getDefault().sendTextMessage()方法,发送短信给安全号码,参数:sendTextMessage(目标手机,null(来源手机不支持),text,sentIntent,deliveryIntent)后两个参数,延迟报告和送达报告,不关心填null
需要这个权限android.permission.SEND_SMS
判断一下内容是否为空,如果为空发送短信内容是正在获取,手动让坐标变化一下,才能正在得到
GPSService.java
packagecom.qingguow.mobilesafe.service;
importandroid.app.Service;
importandroid.content.Intent;
importandroid.content.SharedPreferences;
importandroid.content.SharedPreferences.Editor;
importandroid.location.Criteria;
importandroid.location.Location;
importandroid.location.LocationListener;
importandroid.location.LocationManager;
importandroid.os.Bundle;
importandroid.os.IBinder;
publicclassGPSServiceextendsService{
privateLocationManagerlm;
privateLocationListenerlistener;
privateSharedPreferencessp;
@Override
publicIBinderonBind(Intentarg0){
returnnull;
}
//服务创建
@Override
publicvoidonCreate(){
super.onCreate();
sp=getSharedPreferences("config",MODE_PRIVATE);
//获取位置管理器
lm=(LocationManager)getSystemService(LOCATION_SERVICE);
listener=newMyLocationListener();
Criteriacriteria=newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
Stringprovider=lm.getBestProvider(criteria,true);
lm.requestLocationUpdates(provider,0,0,listener);
}
//服务销毁
@Override
publicvoidonDestroy(){
super.onDestroy();
lm.removeUpdates(listener);
listener=null;
}
privateclassMyLocationListenerimplementsLocationListener{
@Override
publicvoidonLocationChanged(Locationlocation){
//获取经度
Stringlongitude="longitude:"+location.getLongitude();
Stringlatitude="latitude:"+location.getLatitude();
Stringacc="accuracy:"+location.getAccuracy();
//转换火星坐标
try{
ModifyOffsetoffset=ModifyOffset.getInstance(getAssets()
.open("axisoffset.dat"));
PointDoublepinit=offset.s2c(newPointDouble(location
.getLongitude(),location.getLatitude()));
longitude="longitude:"+pinit.x;
latitude="latitude:"+pinit.y;
}catch(Exceptione){
e.printStackTrace();
}
//保存数据
Editoreditor=sp.edit();
editor.putString("lastlocation",longitude+latitude+acc);
editor.commit();
}
@Override
publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){
}
@Override
publicvoidonProviderEnabled(Stringprovider){
}
@Override
publicvoidonProviderDisabled(Stringprovider){
}
}
}
SmsReceiver.java
packagecom.qingguow.mobilesafe.receiver;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.SharedPreferences;
importandroid.media.MediaPlayer;
importandroid.telephony.SmsManager;
importandroid.telephony.SmsMessage;
importandroid.text.TextUtils;
importcom.qingguow.mobilesafe.R;
importcom.qingguow.mobilesafe.service.GPSService;
publicclassSmsReceiverextendsBroadcastReceiver{
privateSharedPreferencessp;
@Override
publicvoidonReceive(Contextcontext,Intentintent){
sp=context.getSharedPreferences("config",Context.MODE_PRIVATE);
//获取短信内容
Object[]objs=(Object[])intent.getExtras().get("pdus");
for(Objectobj:objs){
SmsMessagesms=SmsMessage.createFromPdu((byte[])obj);
Stringbody=sms.getMessageBody();
Stringsender=sms.getOriginatingAddress();
StringsecSender=sp.getString("secphone","");
//判断是安全号码的短信
if(secSender.equals(sender)){
switch(body){
case"#*alarm*#"://发送报警音乐
//Toast.makeText(context,"播放报警音乐",1).show();
MediaPlayermp=MediaPlayer.create(context,R.raw.alarm);
mp.start();
abortBroadcast();
break;
case"#*location*#"://得到位置信息
Intentintent1=newIntent(context,GPSService.class);
context.startService(intent1);
StringlastLocation=sp.getString("lastlocation","");
//发送短信
if(TextUtils.isEmpty(lastLocation)){
SmsManager.getDefault().sendTextMessage(sender,null,"gettinglocation",null,null);
}else{
SmsManager.getDefault().sendTextMessage(sender,null,lastLocation,null,null);
}
System.out.println("获取位置消息"+lastLocation);
abortBroadcast();
break;
default:
break;
}
}
}
}
}
以上所述是小编给大家介绍的Android手机卫士之手机实现短信指令获取位置的相关内容,希望对大家有所帮助!