位置服务的 判断+获取+回调

1、准备阶段

  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;
}
  1. 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中重新执行代码

判断是否开启的代码一定要在需要位置服务的代码之前

你可能感兴趣的:(位置服务的 判断+获取+回调)