web-dev-qa-db-ja.com

LocationCallbackが呼び出されない

FusedLocationProviderClientを使用して位置要求を行っています。タイマーを30秒間保持して、その時間内に位置情報が受信されるかどうかを確認しました。コードは以下の通りです:

 public void requestLocationUpdates() {
    initializeLocationRequest();
    mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null);
    startTimer();
}

 private void initializeLocationRequest() {
    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(mContext);
    mLocationRequest = new LocationRequest();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(5000);
    mLocationRequest.setFastestInterval(5000);

    mLocationCallback = new LocationCallback() {

        @Override
        public void onLocationResult(LocationResult locationResult) {
            synchronized (SilentCurrentLocationProvider.this) {
                super.onLocationResult(locationResult);
                Location location = locationResult.getLastLocation();
        }
    };
}

  private void startTimer() {
    if (mTimeout < 1) {
        mTimeout = mDefaultTimeout;
    }
    mTimer = new Timer();   
    mTimer.schedule(new LocationTimer(), mTimeout * 1000);
}

一部のデバイスでは、現在地が表示されません。さらにデバッグしたところ、LocationRequestおよびLocationCallbackが作成されていることがわかりましたが、それはonLocationResult()メソッドの内部にはありません。

これはライブ製品の一部であるため、すべてのデバイスでデバッグするのは困難です。携帯電話を再起動しようとしても機能しません。ユーザーはOlaのような他のアプリケーションを試してみましたが、場所がそこに来ていました。

場所のアクセス許可も付与されています

この問題の考えられる理由を誰かに教えてもらえますか?

16
TechieLover12

私はこれと同じ問題に直面していました。私の場合、デバイスの配置方法/精度は高精度またはバッテリー節約ではなく電話のみに設定されていました。設定を高精度に変更し、locationCallbackでコールバックを受信します。

3
Rohit Sharma

Android Pieを使用したモバイルで同じ問題が発生しました。位置情報へのアクセス権が付与され(手動でアプリの設定に移動)、位置情報は高精度でオンになりましたが、位置情報の更新が取得されませんでした。iの後で修正されました位置情報の更新を要求する前に位置情報の許可が付与されているかどうかを確認するコードを追加しました。

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
    // Permission is not granted. Request for permission
}
1
Arun

場所がオフにされたときにこれは私に起こりました。アプリの位置情報のアクセス許可ではなく、Androidデバイス自体の位置情報。ユーザーにGPSをアクティブにするように要求すると、固定されます。

protected void onCreate(Bundle savedInstanceState) {
    //...
    final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }
}

private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    startActivity(new Intent(Android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
                }
            });
    final AlertDialog alert = builder.create();
    alert.show();
}

こちら からの解決策。

また、GPSをオフにしてから再度オンにし、ダイアログをトリガーして位置精度を向上させる必要がある場合もあります。

Dialog prompting to improve location accuracy

0
jon

次の権限のみをリクエストする必要があります。

Manifest.permission.ACCESS_FINE_LOCATION

私は同じ問題を抱えており、私は両方の権限を次のように要求していました:

Manifest.permission.ACCESS_COARSE_LOCATION

COARSE LOCATIONを削除すると、ほぼ即座に更新されます。

0