1、准备阶段
- isGPSOPen用于判断是否开启位置服务(gps或者网络)
/**
* 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的
* @param context
* @return true 表示开启
*/
public boolean isGPSOPen(final Context context) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps || network) {
return true;
}
return false;
}
- onActivityResult用于在开启服务后回调(gps或者网络)
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 101){
init();
}
}
2、开始调用
public void init(){
//判断是否开启位置服务
if(!isGPSOPen(this)){
//没有开启,打开设置界面
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 101);
return;//停止执行
}
//已开启
//其他代码
}
在需要获取位置服务之前调用代码会有两种结果1.已授权位置服务正常向下执行,2.未授权位置服务->跳转到设置页授权->然后返回在onActivityResult中重新执行代码
判断是否开启的代码一定要在需要位置服务的代码之前