融合定位开发
配置权限
<!-- 融合定位开发权限-->
<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>() {
@Override
public 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() {
@Override
public 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() {
@Override
public 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());
}
页面
<Button
android:id="@+id/bt_1"
android:text="检测设备状态"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android: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() {
@Override
public void onClick(View v) {
locationFunction();
}
});
bt2 = findViewById(R.id.bt_2);
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
positioningFunction();
}
});