安全卫士第六天笔记

23 篇文章 0 订阅
20 篇文章 0 订阅
创建一个服务,定位当前用户的所在地的信息,当前手机用户收到指定信息后会发送本地坐标给发信息的手机
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;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值