融合定位开发
配置权限
<!-- 融合定位开发权限--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
添加依赖
implementation 'com.huawei.hms:location:5.1.0.303'
动态申请定位权限
//动态申请权限private void setIntegration() {if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {Log.i(TAG, "android sdk <= 28 Q");if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {String[] strings ={Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};ActivityCompat.requestPermissions(this, strings, 1);}} else {// Android SDK>28 所需权限动态申请,需添加“android.permission.ACCESS_BACKGROUND_LOCATION”权限if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,"android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {String[] strings = {Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,"android.permission.ACCESS_BACKGROUND_LOCATION"};ActivityCompat.requestPermissions(this, strings, 2);}}}
检查设备定位开关状态
private void locationFunction() {SettingsClient settingsClient = LocationServices.getSettingsClient(this);LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();LocationRequest mLocationRequest = new LocationRequest();builder.addLocationRequest(mLocationRequest);LocationSettingsRequest locationSettingsRequest = builder.build();// 检查设备定位设置settingsClient.checkLocationSettings(locationSettingsRequest)// 检查设备定位设置接口调用成功监听.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {@Overridepublic void onSuccess(LocationSettingsResponse locationSettingsResponse) {Log.i(TAG, "onSuccess: 成功!");LocationSettingsStates locationSettingsStates =locationSettingsResponse.getLocationSettingsStates();StringBuilder stringBuilder = new StringBuilder();// 定位开关是否打开stringBuilder.append(",\nisLocationUsable=").append(locationSettingsStates.isLocationUsable());// HMS Core是否可用stringBuilder.append(",\nisHMSLocationUsable=").append(locationSettingsStates.isHMSLocationUsable());Log.i(TAG, "checkLocationSetting onComplete:" + stringBuilder.toString());Log.i(TAG, "onSuccess: locationSettingsResponse=====" + locationSettingsResponse.toString());}})// 检查设备定位设置接口失败监听回调.addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.i(TAG, "checkLocationSetting onFailure:失败!!!!!!!" + e.getMessage());}});}
获取当前定位服务
//获取当前定位服务private void positioningFunction() {FusedLocationProviderClient fusedLocationProviderClient = new FusedLocationProviderClient(this);LocationRequest mLocationRequest = new LocationRequest();设置定位类型mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);//设置定位类型 高进度
// 设置回调次数为1
// mLocationRequest.setNumUpdates(1);mLocationRequest.setInterval(10000);//持续定位LocationCallback locationCallback = new LocationCallback() {@Overridepublic void onLocationResult(LocationResult locationResult) {Location lastLocation = locationResult.getLastLocation();//打印当前设备的经纬度Log.i(TAG, "onLocationResult: 定位位置" + lastLocation.getLongitude() +"=="+ lastLocation.getLatitude());}};//介绍了两种方法 以教辅资料为准 开发文档为辅助
// Task<Location> lastLocation = fusedLocationProviderClient.getLastLocation();
// lastLocation.addOnSuccessListener(new )fusedLocationProviderClient.requestLocationUpdates(mLocationRequest, locationCallback, Looper.getMainLooper());}
页面
<Buttonandroid:id="@+id/bt_1"android:text="检测设备状态"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/bt_2"android:text="定位服务"android:layout_width="wrap_content"android:layout_height="wrap_content"/>android:orientation="vertical"android:gravity="center"
后台代码
private Button bt1;private Button bt2;绑定按钮bt1 = findViewById(R.id.bt_1);bt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {locationFunction();}});bt2 = findViewById(R.id.bt_2);bt2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {positioningFunction();}});