创建一个服务,定位当前用户的所在地的信息,当前手机用户收到指定信息后会发送本地坐标给发信息的手机
package ligang.huse.cn;
import android.Manifest;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
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.support.v4.app.ActivityCompat;
import android.telephony.SmsManager;
import android.util.Log;
import java.util.List;
public class GPSService extends Service {
private LocationManager locationManager;
MyLocationListener myLocationListener;
SharedPreferences sp;
public GPSService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
super.onCreate();
sp = getSharedPreferences("config", MODE_PRIVATE);
// 1.获取位置的管理者
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// 2.获取定位方式
// 2.1获取所有的定位方式
// enabledOnly : true : 返回所有可用的定位方式
List<String> providers = locationManager.getProviders(true);
for (String string : providers) {
Log.i("---->",string);
}
// 2.2获取最佳的定位方式
Criteria criteria = new Criteria();
criteria.setAltitudeRequired(true);// 设置是否可以定位海拔,true:可以定位海拔,一定返回gps定位
// criteria : 设置定位的属性,决定使用什么定位方式的
// enabledOnly : true : 定位可用的就返回
String bestProvider = locationManager.getBestProvider(criteria, true);
Log.i("----最佳的定位方式:", bestProvider);
// 3.定位
myLocationListener = new MyLocationListener();
// provider : 定位方式
// minTime : 定位的最小时间间隔
// minDistance : 定位的最小距离间隔
// listener : LocationListener
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.requestLocationUpdates(bestProvider, 0, 0,
myLocationListener);
}
private class MyLocationListener implements LocationListener {
//当定位位置改变的时候调用
//location : 当前的位置
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();//获取纬度,平行
double longitude = location.getLongitude();//获取经度
//给安全号码发送一个包含经纬度坐标的短信
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(sp.getString("safeNumber", "5556"), null, "longitude:" + longitude + " latitude:" + latitude, null, null);
//停止服务
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();
//关闭gps定位,高版本中已经不能这么做了,高版本中规定关闭和开启gps必须交由用户自己去实现
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.removeUpdates(myLocationListener);
}
}
在接受到指定信息后,开启服务返回当前信息
if ("#*location*#".equals(body)) {
//GPS追踪
Intent intent_gps = new Intent(context,GPSService.class);
context.startService(intent_gps);
//拦截短信
abortBroadcast();//拦截操作,原生android系统,国产深度定制系统中屏蔽,比如小米
Log.i("---->", "GPS追踪");
//拦截短信
abortBroadcast();//拦截操作,原生android系统,国产深度定制系统中屏蔽,比如小米
播放报警音乐
else if ("#*alarm*#".equals(body)) {
//播放报警音乐
//在播放报警音乐之前将系统音量设置成最大的
//声音的管理者
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
//设置系统音量的大小
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 15, 0);
//判断是否在播放报警音乐
if (mediaPlayer != null) {
mediaPlayer.release();
}
//获取音乐资源
mediaPlayer = MediaPlayer.create(context, R.raw.ylzs);
//一直播放音乐
mediaPlayer.setLooping(true);
//播放音乐
mediaPlayer.start();
查询电话号码归属地
package ligang.huse.cn.db.dao;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.io.File;
/**
* 查询号码归属地操作
*/
public class AddressDao {
public static String queryAddress(String num, Context context) {
String loctaion = "";
//获取数据库的路径
File file = new File(context.getFilesDir(), "address.db");
//打开数据库
SQLiteDatabase database = SQLiteDatabase.openDatabase(file.getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE);
//使用正则表达式进行判断
//^1[34578]\d{9}$
if (num.matches("^1[34578]\\d{9}$")) {
Cursor cursor = database.rawQuery("select location from data2 where id=(select outkey from data1 where id=?)", new String[]{num.substring(0, 7)});
//解析cursor
if (cursor.moveToNext()) {
//因为每个号码对应一个号码归属地,所以查询出来的是一个号码归属地,没有必要用whlie,用if就可以了
loctaion = cursor.getString(0);
}
cursor.close();
} else {
//对特殊电话做出处理
switch (num.length()) {
case 3:
loctaion = "特殊电话";
break;
case 4:
loctaion = "虚拟电话";
break;
case 5:
loctaion = "客服电话";
break;
case 7:
case 8:
loctaion = "本地电话";
break;
default:
if (num.length() >= 10 && num.startsWith("0")) {
//根据区号查询号码归属
//1.获取号码的区号
//3位,4位
//3位
String result = num.substring(1, 3);
Cursor cursor = database.rawQuery("select location from data2 where=?", new String[]{result});
if (cursor.moveToNext()) {
loctaion = cursor.getString(0);
loctaion = loctaion.substring(0, loctaion.length() - 2);
cursor.close();
} else {
//3位没有查询到,直接查询4位
//获取4位的区号
result = num.substring(1, 4);
loctaion = cursor.getString(0);
loctaion = loctaion.substring(0, loctaion.length() - 2);
cursor.close();
}
}
break;
}
}
//关闭数据库与游标
database.close();
return loctaion;
}
}
安全卫士第六天笔记
最新推荐文章于 2020-03-06 13:00:47 发布