1. ホーム
  2. android

[解決済み] Android:GoogleApiClientはまだ接続されていないのですか?

2022-02-06 21:08:23

質問

ユーザーの現在地を更新するには 私のプロジェクトでは、以下のメソッドを実装しています。

GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener

プロジェクトを実行すると、以下のエラーが発生します。

java.lang.IllegalStateException: GoogleApiClient is not connected yet.

そして、コードにエラーがあります。

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

多くの解決策が提案されています。 これは この しかし、何の問題も解決しない。

解決にご協力ください。

onCreateメソッド内の私のコード。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        FirebaseCrash.report(new Exception("Exceptin"));

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkLocationPermission();
        }

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        mGoogleClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        mLocationRequest = LocationRequest.create()
                .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
                .setInterval(60*1000) 
                .setFastestInterval(1*1000);}

そしてonMapReadyで。

@Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        buildGoogleApiClient();
        mMap.setTrafficEnabled(true);
        mMap.setMyLocationEnabled(true);}

そして、これ。

   protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
        mGoogleApiClient.connect();
    }

 @Override
    public void onConnected(@Nullable Bundle bundle) {

 if (servicesAvailable()) {
            // Get best last location measurement meeting criteria
            mLastLocation = bestLastKnownLocation(MIN_LAST_READ_ACCURACY, FIVE_MIN);

            if (null == mLastLocation
                    || mLastLocation.getAccuracy() > MIN_LAST_READ_ACCURACY
                    || mLastLocation.getTime() < System.currentTimeMillis() - TWO_MIN) {

                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

                // Schedule a runnable to unregister location listeners
                Executors.newScheduledThreadPool(1).schedule(new Runnable() {

                    @Override
                    public void run() {
                        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, MainActivity.this);//This Line Return Error
                    }

                }, ONE_MIN, TimeUnit.MILLISECONDS);
            }
        }else{
            handleNewLocation(mLastLocation);
        }

    }

ご協力ありがとうございました :)

解決方法は?

私は私のプロジェクトでスプラッシュスクリーンを使用するため、私の問題を解決したスプラッシュスクリーンアクティビティにこのコードを置く。

    mGoogleClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();