融合定位开发

配置权限

添加依赖

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() {

@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 lastLocation = fusedLocationProviderClient.getLastLocation();

// lastLocation.addOnSuccessListener(new )

fusedLocationProviderClient.requestLocationUpdates(mLocationRequest, locationCallback, Looper.getMainLooper());

}

页面

android:id="@+id/bt_1"

android:text="检测设备状态"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

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();

}

});

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: