码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-07-27 01:56:06      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:mediaplayer   定位技术   android项目   手机安全卫士   

播放报警音乐

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官方好像都提供了定位框架,做完这个项目之后学一下~~~

版权声明:刚出锅的原创内容,希望对你有帮助~

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

标签:mediaplayer   定位技术   android项目   手机安全卫士   

原文地址:http://blog.csdn.net/liangyu2014/article/details/47071983

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!