浅析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
package com.qingguow.mobilesafe.service; import android.app.service; import android.content.intent; import android.content.sharedpreferences; import android.content.sharedpreferences.editor; import android.location.criteria; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.bundle; import android.os.ibinder; public class gpsservice extends service { private locationmanager lm; private locationlistener listener; private sharedpreferences sp; @override public ibinder onbind(intent arg0) { return null; } // 服务创建 @override public void oncreate() { super.oncreate(); sp=getsharedpreferences("config", mode_private); // 获取位置管理器 lm = (locationmanager) getsystemservice(location_service); listener = new mylocationlistener(); criteria criteria = new criteria(); criteria.setaccuracy(criteria.accuracy_fine); string provider = lm.getbestprovider(criteria, true); lm.requestlocationupdates(provider, 0, 0, listener); } // 服务销毁 @override public void ondestroy() { super.ondestroy(); lm.removeupdates(listener); listener=null; } private class mylocationlistener implements locationlistener { @override public void onlocationchanged(location location) { // 获取经度 string longitude = "longitude:" + location.getlongitude(); string latitude = "latitude:" + location.getlatitude(); string acc = "accuracy:" + location.getaccuracy(); // 转换火星坐标 try { modifyoffset offset = modifyoffset.getinstance(getassets() .open("axisoffset.dat")); pointdouble pinit = offset.s2c(new pointdouble(location .getlongitude(), location.getlatitude())); longitude = "longitude:" + pinit.x; latitude = "latitude:" + pinit.y; } catch (exception e) { e.printstacktrace(); } //保存数据 editor editor=sp.edit(); editor.putstring("lastlocation", longitude+latitude+acc); editor.commit(); } @override public void onstatuschanged(string provider, int status, bundle extras) { } @override public void onproviderenabled(string provider) { } @override public void onproviderdisabled(string provider) { } } }
smsreceiver.java
package com.qingguow.mobilesafe.receiver; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.sharedpreferences; import android.media.mediaplayer; import android.telephony.smsmanager; import android.telephony.smsmessage; import android.text.textutils; import com.qingguow.mobilesafe.r; import com.qingguow.mobilesafe.service.gpsservice; public class smsreceiver extends broadcastreceiver { private sharedpreferences sp; @override public void onreceive(context context, intent intent) { sp=context.getsharedpreferences("config", context.mode_private); //获取短信内容 object[] objs=(object[]) intent.getextras().get("pdus"); for(object obj:objs){ smsmessage sms=smsmessage.createfrompdu((byte[])obj); string body=sms.getmessagebody(); string sender=sms.getoriginatingaddress(); string secsender=sp.getstring("secphone", ""); //判断是安全号码的短信 if(secsender.equals(sender)){ switch (body) { case "#*alarm*#"://发送报警音乐 //toast.maketext(context, "播放报警音乐", 1).show(); mediaplayer mp=mediaplayer.create(context, r.raw.alarm); mp.start(); abortbroadcast(); break; case "#*location*#"://得到位置信息 intent intent1=new intent(context,gpsservice.class); context.startservice(intent1); string lastlocation= sp.getstring("lastlocation", ""); //发送短信 if(textutils.isempty(lastlocation)){ smsmanager.getdefault().sendtextmessage(sender, null,"getting location", null, null); }else{ smsmanager.getdefault().sendtextmessage(sender, null,lastlocation, null, null); } system.out.println("获取位置消息"+lastlocation); abortbroadcast(); break; default: break; } } } } }
以上所述是小编给大家介绍的android手机卫士之手机实现短信指令获取位置的相关内容,希望对大家有所帮助!