LocationRequest当坐标不出现时如何处理情况

问题描述

我已经使用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 (将#修改为@)