您的位置:首页 > 其它

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

2016-05-22 01:22 267 查看
为了获取定位信息 我们新开一个服务
代码如下

/**
* 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()来终止服务,以免费电的情况出现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: