如何解决Android Java-Google LocationRequest和LocationManager的问题
(编辑:修复了LocationManager更新,,但是使用Google Api对话框启用GPS后,我仍然始终在onActivityResult中得到RESULT_FAILED。)
任何人都可以告诉我为什么如果我使用Google Api对话框启用GPS以及手动启用GPS,LocationManager位置更新为什么会停止工作?谢谢!
还有为什么我在使用Google Api对话框启用GPS(并正确启用GPS)后总是在onActivityReturn中得到RESULT_FAILED?
我需要一些有关此问题的信息和帮助。
我做了一个utils类,以使用Google Dialog启用gps高精度:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/layout.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Grafiek</title>
<style>
.red{
background-color:red;
}
.blue{
background-color:blue;
}
.green{
background-color:green;
}
</style>
</head>
<body>
<h1>Server Stats</h1>
<div id="maindiv">
<div id="server1" class="serverstatus">
<h3>(servername1)</h3>
<div>
Status:
</div>
<br>
<div>
Last Checked:
</div>
<div>
Last Online:
</div>
<div>
<button onclick="toggleStatus('server1','red')">yes</button>
</div>
</div>
<div id="server2" class="serverstatus">
<h3>(servername2)</h3>
<div>
Status:
</div>
<br>
<div>
Last Checked:
</div>
<div>
Last Online:
</div>
<div>
<button onclick="toggleStatus('server2','green')">yes</button>
</div>
</div>
<div id="server3" class="serverstatus">
<h3>(servername3)</h3>
<div>
Status:
</div>
<br>
<div>
Last Checked:
</div>
<div>
Last Online:
</div>
<div>
<button onclick="toggleStatus('server3','blue')">yes</button>
</div>
</div>
</div>
</body>
</html>
我还尝试将此类更改为:
public class EnableLocationCallback implements OnCompleteListener<LocationSettingsResponse> {
// Millis Interval
private static final long MILLIS_FASTEST_INTERVAL = 1000L;
private static final long MILLIS_INTERVAL = MILLIS_FASTEST_INTERVAL * 0xA;
private Activity mActivity;
private int mRequestCode;
public static void requestEnableLocation(Activity activity,int requestCode){
new EnableLocationCallback(activity,requestCode).requestEnableLocation();
}
private EnableLocationCallback(Activity activity,int requestCode){
mActivity = activity;
mRequestCode = requestCode;
}
/** Override OnCompleteListener<LocationSettingsResponse> Methods **/
@Override
public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
try {
task.getResult(ApiException.class);
} catch (ApiException ex){
switch (ex.getStatusCode()){
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
((ResolvableApiException) ex).startResolutionForResult(mActivity,mRequestCode);
} catch (IntentSender.SendIntentException e) {
openGpsEnabledSettings();
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
openGpsEnabledSettings();
break;
}
}
}
/** Private Methods **/
private void requestEnableLocation(){
getSettingsClient(mActivity)
.checkLocationSettings(getLocationSettingsRequest())
.addOnCompleteListener(this);
}
private LocationRequest getLocationRequest(){
return LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(MILLIS_INTERVAL)
.setFastestInterval(MILLIS_FASTEST_INTERVAL);
}
private LocationSettingsRequest getLocationSettingsRequest(){
return new LocationSettingsRequest.Builder()
.addLocationRequest(getLocationRequest())
.setAlwaysShow(true)
.build();
}
private void openGpsEnabledSettings(){
mActivity.startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS),mRequestCode);
}
}
在两种情况下,我都启用了GPS,但GPS启用了“高精度”启用,但是... 在我的活动“ onActivityResult”上,我总是得到resultCode == -0x1(如此失败)。
我还看到,在开始使用此代码后,我正在使用此代码进行位置更新的所有零件(单个更新或多个):
public class EnableLocationCallback implements
GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener {
// Millis Interval
private static final long MILLIS_FASTEST_INTERVAL = Constants.MILLIS_ONE_SECOND * 0x5;
private static final long MILLIS_INTERVAL = Constants.TIMEOUT_GET_POSITION;
private GoogleApiClient mGoogleApiClient;
private Activity mActivity;
private int mRequestCode;
public static void requestEnableLocation(Activity activity,int requestCode){
EnableLocationCallback instance = new EnableLocationCallback(activity,requestCode);
instance.initGoogleApiClient();
instance.initLocationSettingResultCallback();
}
private EnableLocationCallback(Activity activity,int requestCode){
mActivity = activity;
mRequestCode = requestCode;
}
/** Override GoogleApiClient.ConnectionCallbacks Methods **/
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
/** Override GoogleApiClient.OnConnectionFailedListener Methods **/
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
/** Private Methods **/
private void initGoogleApiClient(){
mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.build();
mGoogleApiClient.connect();
}
private void initLocationSettingResultCallback(){
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,getLocationSettingsRequest()).setResultCallback(
result -> {
final Status status = result.getStatus();
final LocationSettingsStates state = result.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
status.startResolutionForResult(mActivity,mRequestCode);
} catch (IntentSender.SendIntentException e) {
openGpsEnabledSettings();
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
openGpsEnabledSettings();
break;
}
}
);
}
private void requestEnableLocation(){
getSettingsClient(mActivity)
.checkLocationSettings(getLocationSettingsRequest());
}
private LocationRequest getLocationRequest(){
return LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(MILLIS_INTERVAL)
.setFastestInterval(MILLIS_FASTEST_INTERVAL);
}
private LocationSettingsRequest getLocationSettingsRequest(){
return new LocationSettingsRequest.Builder()
.addLocationRequest(getLocationRequest())
.setAlwaysShow(true)
.build();
}
private void openGpsEnabledSettings(){
mActivity.startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS),mRequestCode);
}
}
所有这些部分停止工作。 我使用gps更新对话框无法启用GPS,如果我手动启用它也将无法使用!
您能解释一下并告诉我如何解决吗?
我还将希望看到有关“ Google SettingsClient”,“ GoogleApi
例如... google页面仅告诉您一些信息,我没有告诉您扩展类后应该传递给超级构造函数的东西,以及许多其他事情:/
非常感谢您, 祝您编码愉快,并祝您愉快:D
#EDIT: 我通过使用“ FusedLocationManager”和正确的LocationListener进行位置更新来修复了LocationManager更新。 但是在使用对话框正确启用GPS后,我仍然总是会得到RESULT_FAILED。 我现在的课程是:
mLocationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER,mUserPositionListener,null);
我从这里使用@Janishar Ali的答案来改善我的课程: Janishar Ali Answer Link
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。