天天看點

華為系統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);

}

}

};

請求位置更新。

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

}

}