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

 更新时间:2016年04月17日 11:54:06   作者:陶士涵   我要评论
这篇文章主要介绍了浅析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

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

相关文章

最新评论