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

播放报警音乐

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值