失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 华为系统gps定位服务器地址 定位服务

华为系统gps定位服务器地址 定位服务

时间:2018-08-26 07:12:39

相关推荐

华为系统gps定位服务器地址 定位服务

申请定位权限。在工程的"Manifest"文件中添加相关权限。

在Android Q版本中,如果您需要应用程序在后台执行时也具备持续定位能力,需要在"Manifest"文件中添加ACCESS_BACKGROUND_LOCATION权限。

在"RequestLocationUpdatesWithCallbackActivity.Java"中动态申请相关权限。

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {

Log.i(TAG, "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 {

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 = {android.Manifest.permission.ACCESS_FINE_LOCATION,

android.Manifest.permission.ACCESS_COARSE_LOCATION,

"android.permission.ACCESS_BACKGROUND_LOCATION"};

ActivityCompat.requestPermissions(this, strings, 2);

}

}

"RequestLocationUpdatesWithCallbackActivity.Java"权限申请结果回调。

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == 1) {

if (grantResults.length > 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED

&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {

Log.i(TAG, "onRequestPermissionsResult: apply LOCATION PERMISSION successful");

} else {

Log.i(TAG, "onRequestPermissionsResult: apply LOCATION PERMISSSION failed");

}

}

if (requestCode == 2) {

if (grantResults.length > 2 && grantResults[2] == PackageManager.PERMISSION_GRANTED

&& grantResults[0] == PackageManager.PERMISSION_GRANTED

&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {

Log.i(TAG, "onRequestPermissionsResult: apply ACCESS_BACKGROUND_LOCATION successful");

} else {

Log.i(TAG, "onRequestPermissionsResult: apply ACCESS_BACKGROUND_LOCATION failed");

}

}

}

后续步骤均可参考"RequestLocationUpdatesWithCallbackActivity.Java"文件。

创建位置信息提供者客户端和设备设置客户端。// 定位交互接入对象

private FusedLocationProviderClient fusedLocationProviderClient;

//位置相关设置检查对象

private SettingsClient settingsClient;

//create a fusedLocationProviderClient

fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

//create a settingsClient

settingsClient = LocationServices.getSettingsClient(this);

创建位置信息请求体。LocationRequest mLocationRequest;

mLocationRequest = new LocationRequest();

// set the interval for location updates, in milliseconds.

mLocationRequest.setInterval(10000);

// set the priority of the request.

mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

创建结果回调类。LocationCallback mLocationCallback;

mLocationCallback = new LocationCallback() {

@Override

public void onLocationResult(LocationResult locationResult) {

if (locationResult != null) {

Listlocations = locationResult.getLocations();

if (!locations.isEmpty()) {

for (Location location : locations) {

Log.i(TAG,"onLocationResult location[Longitude,Latitude,Accuracy]:" + location.getLongitude() + "," + location.getLatitude() + "," + location.getAccuracy());

}

}

}

}

@Override

public void onLocationAvailability(LocationAvailability locationAvailability) {

if (locationAvailability != null) {

boolean flag = locationAvailability.isLocationAvailable();

Log.i(TAG, "onLocationAvailability isLocationAvailable:" + flag);

}

}

};

请求位置更新。/**

* function:Requests location updates with a callback on the specified Looper thread.

* first:use SettingsClient object to call checkLocationSettings(LocationSettingsRequest locationSettingsRequest) method to check device settings.

* second:use FusedLocationProviderClient object to call requestLocationUpdates (LocationRequest request, LocationCallback callback, Looper looper) method.

*/

private void requestLocationUpdatesWithCallback() {

try {

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();

builder.addLocationRequest(mLocationRequest);

LocationSettingsRequest locationSettingsRequest = builder.build();

// check devices settings before request location updates.

settingsClient.checkLocationSettings(locationSettingsRequest)

.addOnSuccessListener(new OnSuccessListener() {

@Override

public void onSuccess(LocationSettingsResponse locationSettingsResponse) {

Log.i(TAG, "check location settings success");

// request location updates.

fusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper()).addOnSuccessListener(new OnSuccessListener() {

@Override

public void onSuccess(Void aVoid) {

Log.i(TAG, "requestLocationUpdatesWithCallback onSuccess");

}

})

.addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

Log.e(TAG,

"requestLocationUpdatesWithCallback onFailure:" + e.getMessage());

}

});

}

})

.addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

Log.e(TAG, "checkLocationSetting onFailure:" + e.getMessage());

int statusCode = ((ApiException) e).getStatusCode();

switch (statusCode) {

case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:

try {

ResolvableApiException rae = (ResolvableApiException) e;

rae.startResolutionForResult(RequestLocationUpdatesWithCallbackActivity.this, 0);

} catch (IntentSender.SendIntentException sie) {

Log.e(TAG, "PendingIntent unable to execute request.");

}

break;

}

}

});

} catch (Exception e) {

Log.e(TAG, "requestLocationUpdatesWithCallback exception:" + e.getMessage());

}

}

移除位置信息更新请求。private void removeLocationUpdatesWithCallback() {

try {

fusedLocationProviderClient.removeLocationUpdates(mLocationCallback)

.addOnSuccessListener(new OnSuccessListener() {

@Override

public void onSuccess(Void aVoid) {

Log.i(TAG, "removeLocationUpdatesWithCallback onSuccess");

}

})

.addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

Log.e(TAG, "removeLocationUpdatesWithCallback onFailure:" + e.getMessage());

}

});

} catch (Exception e) {

Log.e(TAG, "removeLocationUpdatesWithCallback exception:" + e.getMessage());

}

}

如果觉得《华为系统gps定位服务器地址 定位服务》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。