欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

浅析Android手机卫士之手机实现短信指令获取位置

程序员文章站 2024-03-01 09:36:22
推荐阅读: 浅析android手机卫士sim卡绑定 深入浅析android手机卫士保存密码时进行md5加密 详解android 手机卫士设置向导页面 浅析andro...

推荐阅读:

浅析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

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手机卫士之手机实现短信指令获取位置的相关内容,希望对大家有所帮助!