问题描述
我已经使用locationrequest 10秒钟来检测当前坐标。需要处理的情况是,在这10秒钟内没有出现坐标时,并显示相关消息。
例如,如果我正在使用网络提供商,则坐标显示的速度比10秒还快。但是,如果我仅使用gps(例如在我的房间中),则需要10秒钟,但坐标不会出现(由于墙壁干扰)。因此,在这种情况下,位置应等于“ null”?还是我不明白什么?而这种情况我需要处理。我正在尝试在locationcallback中做到这一点,但这是行不通的。
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_FINE_COARSE_LOCATION = 56;
private Button btn_getLoc;
private TextView tv_lat;
private TextView tv_lon;
private Switch sw_gps;
FusedLocationProviderClient mFusedLocationProviderClient;
LocationCallback mLocationCallback;
LocationRequest locationRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_getLoc = (Button) findViewById(R.id.btn_getLoc);
tv_lat = (TextView) findViewById(R.id.tv_lat);
tv_lon = (TextView) findViewById(R.id.tv_lon);
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
Location location = locationResult.getLastLocation();
if (location != null) {
updateOurCrd(location);
} else {
locNull();
}
}
};
btn_getLoc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED) {
updateGPS();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET},PERMISSION_FINE_COARSE_LOCATION);
}
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
switch (requestCode) {
case PERMISSION_FINE_COARSE_LOCATION:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED &&
grantResults[1] == PackageManager.PERMISSION_GRANTED &&
grantResults[2] == PackageManager.PERMISSION_GRANTED) {
updateGPS();
} else {
Toast.makeText(this,"Разрешения не получены.",Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
private void updateGPS() {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
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,Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED) {
mFusedLocationProviderClient.getLastLocation().addOnSuccessListener(this,new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
startLocationUpdates();
}
});
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,PERMISSION_FINE_COARSE_LOCATION);
}
}
} else {
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
private void locNull() {
tv_lat.setText("Text");
tv_lon.setText("Text");
}
private void startLocationUpdates() {
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,Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED) {
locationRequest = new LocationRequest();
locationRequest
.setInterval(0)
.setFastestInterval(0)
.setExpirationDuration(10000)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setNumUpdates(1);
mFusedLocationProviderClient.requestLocationUpdates(locationRequest,mLocationCallback,Looper.myLooper());
}
}
private void updateOurCrd(Location location) {
double x = location.getLatitude();
double y = location.getLongitude();
tv_lat.setText("Lat: " + String.valueOf(x));
tv_lon.setText("Lon: " + String.valueOf(y));
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)