安全卫士10————获取定位信息

Android定位服务实现
本文介绍了一个用于获取Android设备定位信息的服务实现方式。该服务通过创建一个自定义的LocationService类来监听位置变化,并将获取到的经纬度信息保存到SharedPreferences中。文章详细展示了如何在AndroidManifest.xml中注册服务及所需权限。
为了获取定位信息 我们新开一个服务
代码如下

/**
* Created by admin on 2016/5/21.
*/
public class LocationService extends Service {
    LocationManager lm;
    private MyLocationListener listener;
    private SharedPreferences mPref;

    @Override
    public void onCreate() {
        super.onCreate();

        //初始化一个SharePerferences用来保存位置信息
        mPref = getSharedPreferences("config",MODE_PRIVATE);

        //获取系统的定位服务
        lm = (LocationManager) getSystemService(LOCATION_SERVICE);

        //获取一个最好的位置提供者
        Criteria criteria=new Criteria();
        criteria.setCostAllowed(true);//是否允许付费,比如使用3G网络定位
        criteria.setAccuracy(Criteria.ACCURACY_FINE);//精确度,选择高精确度
        //返回可用的最好的位置提供者,如果为false则无论提供者启用与否都选择最好的
        String bestProvider=lm.getBestProvider(criteria, true);

        listener = new MyLocationListener();

        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;
        }
        /*
        参数1表示位置提供者
        参数2表示最短更新时间
        参数3表示最近更新距离
        参数4表示
        */
        lm.requestLocationUpdates(bestProvider, 0, 0, listener);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    class MyLocationListener implements LocationListener {

        //位置发生变化
        @Override
        public void onLocationChanged(Location location) {
            String j="经度: "+location.getLongitude();
            String w="纬度: "+location.getLatitude();
          //记录当前保存的位置信息
            mPref.edit().putString("location","j: "+location.getLongitude()+
            "  "+"w: "+location.getAltitude()).commit();
          //终止当前服务
            stopSelf();
        }

        //状态发生变化
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.d("AAAAAAAAAAAAAA", "onStatusChanged");
        }

        //用户打开GPS
        @Override
        public void onProviderEnabled(String provider) {

        }

        //用户打开GPS
        @Override
        public void onProviderDisabled(String provider) {

        }
    }
}
当然这个服务需要在AndroidManifest中注册

<service android:name=".service.LocationService"></service>

还需要添加权限,一个精确,一个模糊

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

这样在我们的短信广播接受者中就可以来获取定位的数据了
当然获取数据是从SharePerferences中获取

if("#*location*#".equals(messageBody)){
    //获取经纬度坐标
    //开启定位服务
    context.startService(new Intent(context, LocationService.class));
    SharedPreferences sp= context.getSharedPreferences("config", Context.MODE_PRIVATE);
    String location=sp.getString("location", "getting location...");

    abortBroadcast();
}

理论上在这里开启服务之后服务就不会被关闭,所以在服务的代码中获取位置信息提交之后就stopself()来终止服务,以免费电的情况出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值