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

本文详细介绍了在Android Q及以上版本如何在应用程序后台持续获取定位权限,包括在Manifest文件中添加ACCESS_BACKGROUND_LOCATION权限,动态请求权限并处理回调,以及创建位置信息提供者和设备设置客户端的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

申请定位权限。在工程的"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());

}

}

### 更改华为手机上的定位设置 要在华为手机上更改定位设置,可以根据具体需求调整相关选项。以下是详细的指导: #### 1. **访问定位服务** 首先,在手机的【设置】中找到并进入【安全与隐私】或【高级设置】下的【定位服务】选项[^4]。 #### 2. **启用或禁用定位功能** 在【定位服务】页面中,可以开关定位功能。如果需要更精确的定位效果,可以选择开启【高精度模式】,该模式会利用 GPS、Wi-Fi 和移动网络等多种方式来增强定位准确性。 #### 3. **授予应用程序权限** 如果某些应用无法正常获取位置信息,则需确认这些应用是否已获得必要的权限。前往【设置】 -> 【应用和服务】 -> 【应用管理】,查找对应的应用程序,并为其分配所需的定位权限[^1]。 #### 4. **优化GPS性能** 对于导航或其他依赖精准地理位置的服务,可以通过修改AGPS(辅助全球定位系统)服务器参数来改善GPS信号接收效率。一种方法是手动编辑设备中的NTP时间同步配置或是通过第三方工具加载预设好的GPS配置文件实现更快捷有效的卫星捕捉过程[^2]。 #### 5. **其他推荐操作** - 开启 WLAN 和蓝牙扫描有助于提升室内环境下的定位表现。 ```plaintext 设置路径:设置->高级设置->定位服务->菜单->扫描设置->勾选"WLAN和蓝牙扫描" ``` 此外,定期重启设备也有助于清除缓存错误数据从而恢复正常运作状态。 ```python # 示例代码展示如何通过命令行检查当前系统的日期与时区设置(间接影响GPS校准) import os os.system('date') # 查看系统时间 os.system('timedatectl status') # Linux平台下查看详细时间/时钟状态 ``` #### 注意事项 确保所做的一切改动均基于个人实际使用场景考虑;对于不确定的操作步骤最好事先做好备份工作以防万一出现问题能够迅速恢复原状。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值