94.s1-监控手机定位

在广播接收者中,检测接受到的信息,然后添加相应的逻辑,跳转到服务,在服务中启动定位服务,定位服务的过程中获取到经纬度,同时把数据保存,再关闭服务以节约手机电量。然后在广播接收者中获取到保存的数据就是上一次发送的位置信息。
权限添加
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
注册服务
<service android:name="com.ldw.safe.service.LocationService"></service>
SmsReceiver.java
package com.ldw.safe.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.telephony.SmsMessage;

import com.ldw.safe.R;
import com.ldw.safe.service.LocationService;

/*
 * 拦截短信
 */
public class SmsReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Object[] objects = (Object[]) intent.getExtras().get("pdus");
		
		for(Object object : objects){
			SmsMessage message = SmsMessage.createFromPdu((byte[])object);
			//获取到短信的来源号码
			String originalAddress = message.getOriginatingAddress();
			//获取到短信的内容
			String messageBody = message.getMessageBody();
			
			System.out.println(originalAddress + ":" + messageBody);
			//如果收到的信息是#*alarm*#,就让系统短信app接受不到内容
			if ("#*alarm*#".equals(messageBody)) {
				// 播放报警音乐, 即使手机调为静音,也能播放音乐, 因为使用的是媒体声音的通道,和铃声无关
				MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs);
				//音量调到最大值
				player.setVolume(1f, 1f);
				//单曲循环、
				player.setLooping(true);
				//播放报警音乐
				player.start();
				//中断短信
				abortBroadcast();
			}else if("#*location*#".equals(messageBody)){
				//获取经纬度坐标
				//开启定位服务
				context.startService(new Intent(context, LocationService.class));
				
				//获取到位置信息
				SharedPreferences mPref = context.getSharedPreferences("config", Context.MODE_PRIVATE);
				String location = mPref.getString("location", "waiting...");
				
				System.out.println("location:" + location);
				
				//中断短信
				abortBroadcast();
			}else if("#*wipedata*#".equals(messageBody)){
				
			}else if("#*lockscreen*#".equals(messageBody)){
				
			}
		}

	}

}
提供位置服务
LocationService.java
package com.ldw.safe.service;


import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.TextView;

/*
 * 获取经纬度坐标
 */
public class LocationService extends Service {

	private TextView tvLocation;
	private LocationManager lm;
	private MyLocationListener listener;
	public SharedPreferences mPref;
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public void onCreate(){
		super.onCreate();
		
		mPref = getSharedPreferences("config", MODE_PRIVATE);
		
		lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        //获取所有的位置提供者(定位方法)
        //List<String> allProviders = lm.getAllProviders();
        //System.out.println(allProviders);
		//创建Criteria
		Criteria criteria = new Criteria();
		//是否允许付费
		criteria.setCostAllowed(true);
		criteria.setAccuracy(criteria.ACCURACY_FINE);
		//获取最佳的定位方法
        String bestProvider = lm.getBestProvider(criteria, true);
        
        listener = new MyLocationListener();
        //第一个参数是提供位置的方式,第二个参数是最短的更新位置的时间,第三个参数是最短的更新位置的距离
        //0表示随时更新
        lm.requestLocationUpdates(bestProvider, 0, 0, listener);
	}
	
	class MyLocationListener implements LocationListener{

    	//位置发生回掉的函数
		@Override
		public void onLocationChanged(Location location) {
			String latitude = "经度" + location.getLatitude();
			String longitude = "维度" + location.getLongitude();
			//保存获取的经纬度
			mPref.edit().putString("location", "latitude:" + latitude + "longitude:" +longitude).commit();
			
			
			//获取到经纬度就关闭掉服务,节约用电
			stopSelf();
			
		}

		//位置提供者状态发生变化的回掉
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
			
		}

		//用户把位置提供者打开的时候的回掉
		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			
		}
    	
    }
    
    @Override
    public void onDestroy(){
    	super.onDestroy();
    	//activity销毁时,关闭定位
    	lm.removeUpdates(listener);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值