手机安全卫士------手机防盗页面之播放报警音乐&GPS定位

来源:互联网 发布:JavaScript this 编辑:程序博客网 时间:2024/04/29 21:10

播放报警音乐

1.把音乐文件放在res/raw文件中

2.创建MediaPlayer对象
MediaPlayer player = MediaPlayer.create(Context,R.raw.*);

3.设置声音为最高:
player.setVolume(1.0f,1.0f);

4.设置声音为循环播放:
player.setLooping(true);

代码:

  //报警音乐  MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.alarm);  //音量调成最高  mediaPlayer.setVolume(1.0f,1.0f);  //循环播放  mediaPlayer.setLooping(true);  //开始播放  mediaPlayer.start();

GPS定位
1.定位方式:
网络定位 基站定位 GPS定位

(1)网络定位 WiFi 2g 3g
得到IP地址 ,根据IP地址确定其大概方位
误差很大

(2)基站定位
定位的精确度取决于基站的数量

(3)GPS定位
通过卫星定位。
适用于在空旷的场地

A-GPS
缩短定位时间 、降低耗电量、提升定位灵敏度
精确度高 15m左右

定位功能的代码实现:

1.创建一个类:GPSService,继承自Service
2.在清单列表中注册
3.在onCreate()方法中进行获取位置的操作

  • 创建位置服务
    LocationManager manager = getSystemService(LOCATION_SERVICE);

  • 获取最佳位置提供者

    • 设置条件
      Criteria criteria = new Criteria();
      criteria.setAccuracy(Criteria.ACCURACY_FINE);

    • 获取最佳位置提供者
      String provider = criteria.getBestProvider(criteria,true);

    • 监听位置变化
      manager.requestLocationUpdates()
      ·第一个参数: 定位方式(“gps”)
      ·第二个参数: 多久更新一次 60000(1分钟)
      ·第三个参数:多少米更新一次 50
      ·第四个参数: 接口,监听位置
      new LocationListener{
      //位置改变时回调
      onLocationChanged()
      {
      String jingdu = “”+location.getLongitude();
      String weidu = “”+location.getLatitude();
      //精确度
      String accuracy = “”+location.getAccuracy();
      }

      //状态发生改变时回调 从开启到关闭之类的
      onStatusChanged()
      {

      }

      //某一个位置提供者可用
      onProviderEnabled()

      //某一个位置提供者不可用
      onProviderDisabled()
      }

    取消监听:
    onDestroy()中:
    lm.removeUpdates(listener);
    listener = null;

权限: ACCESS_FINE_LOCATION 高精度位置
ACCESS_COARSE_LOCATION 粗略位置
ACCESS_MOCK_LOCATION 模拟器位置

火星坐标系统(国家保密插件)
出于安全战略,我国GPS的定位结果都会有一定的偏移量(无规律的加偏)

//火星坐标转换代码:(网上有,可以降低偏移量,提高精确度)

1.ModifyOffset.getInstance(.class.getResouceAdStream(.dat));
2.PointDouble newdouble1 = offset.s2c(new PointDouble(经度,纬度))
3.longtitude = offset.X;
4.latitude = offset.Y;

最终的代码实现:

GPSService.class

public class GPSService extends Service{    private SharedPreferences sp;    private SharedPreferences.Editor editor;    private LocationManager manager;    private MyLocalChangedListener listener;    public GPSService() {    }    public IBinder onBind(Intent intent)    {        return new Binder();    }    public void onCreate()    {        super.onCreate();        sp = getSharedPreferences("config",MODE_PRIVATE);        editor = sp.edit();        listener = new MyLocalChangedListener();        //创建定位服务        manager = (LocationManager) getSystemService(LOCATION_SERVICE);        //设置条件        Criteria criteria = new Criteria();        criteria.setAccuracy(Criteria.ACCURACY_FINE);        //获得最佳的位置提供者        String providers = manager.getBestProvider(criteria,true);        //监听位置的变化        manager.requestLocationUpdates(providers,60000,50,listener);    }    public void onDestroy()    {        super.onDestroy();        manager.removeUpdates(listener);        listener = null;    }    public class MyLocalChangedListener implements LocationListener    {        //位置发生变化时回调        public void onLocationChanged(Location location)        {            //1.获取经纬度和精确度            double longitude = location.getLongitude();            double latitude = location.getLatitude();            //2.把普通坐标转换成火星坐标            InputStream is = GPSService.class.getResourceAsStream("axisoffset.dat");            try            {                ModifyOffset modify = ModifyOffset.getInstance(is);                PointDouble pointDouble = modify.s2c(new PointDouble(longitude,latitude));                String longitudeTrue = pointDouble.x+"";                String latitudeTrue = pointDouble.y+"";                //保存经纬度                editor.putString("location","经度:"+longitudeTrue+"\n纬度:latitude");                editor.commit();            }            catch (Exception e)            {                e.printStackTrace();            }        }        //状态发生变化时回调        public void onStatusChanged(String provider, int status, Bundle extras) {        }        //位置提供者可用时回调        public void onProviderEnabled(String provider) {        }        //位置提供者不可用时回调        public void onProviderDisabled(String provider) {        }    }}

在SmsReceiver中

//获得定位String number = sp.getString("safeNumber",null);Intent intent1 = new Intent(context, GPSService.class);context.startService(intent1);String location = sp.getString("location",null);//发送短信if(TextUtils.isEmpty(location)){                                    SmsManager.getDefault().sendTextMessage(number,null,"位置正在获取中,请稍后。。。",null,null);}else{                        SmsManager.getDefault().sendTextMessage(number,null,location,null,null);}

百度定位和Google官方好像都提供了定位框架,做完这个项目之后学一下~~~

0 0
原创粉丝点击