1

私の主な活動である次の単純なクラスがあります。私は基本的に、Android docs からこの逐語に従いました。私はAndroid Studioを介して携帯電話からこれを実行しています。私が直面している問題は、このセットアップから正当な場所を絶対に取得できないことです。オブジェクトはlocation常に null です。実際には、ブラウザnavigator.geolocation.

この設定方法に何か変なところがありますか? そうでない場合、Fused Location Provider API から場所を強制的に除外するにはどうすればよいですか?

public class MyActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
    private Location location;
    private GoogleApiClient mGoogleApiClient;
    private static LocationRequest locationRequest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        // Create an instance of GoogleAPIClient.
        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }
    }

    @Override
    protected void onStart() {
        mGoogleApiClient.connect();
        super.onStart();
    }

    @Override
    protected void onStop() {
        mGoogleApiClient.disconnect();
        super.onStop();
    }

    private void requestLocationUpdates() {
        locationRequest = new LocationRequest();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(1000);
        locationRequest.setFastestInterval(500);
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        requestLocationUpdates();
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,  locationRequest, this);
        location = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (location != null) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }
    }

    @Override
    public void onConnectionSuspended(int i) {}

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {}
}
4

1 に答える 1

0

高精度とは、GPS が必要になることを意味します。GPS 衛星と実際に通信できない場合 (たとえば、空への明確な境界線がない建物の中にいる場合)、結果は送信されません。これは実際には正しい動作です。高精度が必要な場合は、それが得られるまで待機します。

精度が低くても問題ない場合は、別の優先度タイプを使用してください。そうしないと、応答が得られない可能性があることを受け入れる必要があります。

ところで、最適な条件下でも数秒かかると予想してください。答えを出す前に、宇宙で半ダースの人工衛星を見つけなければならず、それには時間がかかります。

于 2016-07-04T21:24:33.760 に答える