0

私はアプリを開発し、(thisライブラリからの)利用者の現在の座標を取得するには、次のコードを使用していますを参照してください。すべての条件が満たされた後でも特定のコードが実行されません。詳細

ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(getBaseContext()); 
      locationProvider.getLastKnownLocation().subscribe(new Action1<Location>() { 
        @Override 
        public void call(Location location) { 
        currentLatDouble = location.getLatitude(); 
        currentLngDouble = location.getLongitude(); 
        Toast.makeText(getBaseContext(), "User's location retrieved using library for android M in btnRetryGpsEvents()", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

問題は、このコードは、時にはた後も実行されますしていないということですすべての条件は真です。以下のコードを参照してください:上記のコードを実行した後

if (currentLatDouble != null || currentLngDouble != null) { 
      retrieveHWrapper(); 
      progressBarLoadingRequests.setVisibility(View.VISIBLE); 
      btnRetryGps.setVisibility(View.INVISIBLE); 
      gps_off.setVisibility(View.INVISIBLE); 
      Toast.makeText(getBaseContext(), "Loading hrequests...", Toast.LENGTH_LONG).show(); 
     } else { 
      gps_off.setVisibility(View.VISIBLE); 
      progressBarLoadingRequests.setVisibility(View.INVISIBLE); 
      btnRetryGps.setVisibility(View.VISIBLE); 
      btnRetryGps.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       btnRetryGpsEvents(); 
       int hasWriteContactsPermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) & ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) & ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) & ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_SETTINGS); 
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) { 
             if (ActivityCompat.checkSelfPermission(getBaseContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getBaseContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getBaseContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getBaseContext(), Manifest.permission.WRITE_SETTINGS) != PackageManager.PERMISSION_GRANTED) { 
              // TODO: Consider calling 
              // ActivityCompat#requestPermissions 
              // here to request the missing permissions, and then overriding 
              // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
              //           int[] grantResults) 
              // to handle the case where the user grants the permission. See the documentation 
              // for ActivityCompat#requestPermissions for more details. 
              if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) && !ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) && !ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) && !ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_SETTINGS)) { 
               showMessageOKCancel("You need to allow access to few permissions so that the app can work as expected.", 
                 new DialogInterface.OnClickListener() { 
                  @Override 
                  public void onClick(DialogInterface dialog, int which) { 
                   ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_SETTINGS}, 
                     REQUEST_RUNTIME_PERMISSION); 
                  } 
                 }); 
               return; 
              } 
              ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_SETTINGS}, 
                REQUEST_RUNTIME_PERMISSION); 
              return; 
             } 
            } 

            ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(getBaseContext()); 
            locationProvider.getLastKnownLocation() 
              .subscribe(new Action1<Location>() { 
               @Override 
               public void call(Location location) { 
                currentLatDouble = location.getLatitude(); 
                currentLngDouble = location.getLongitude(); 
                Toast.makeText(getBaseContext(), "User's location retrieved using library for android M in btnRetryGpsEvents()", Toast.LENGTH_SHORT).show(); 
               } 
              }); 
            Toast.makeText(getBaseContext(), "called from btnRetryGpsEvents() - GPS available", Toast.LENGTH_SHORT).show(); 
           } 
          }); 
         } 

を、これによるコードへのトーストが示されている:これは実行なっていることを意味Toast.makeText(getBaseContext(), "called from btnRetryGpsEvents() - GPS available", Toast.LENGTH_SHORT).show();を、ちょうどそれ以上のトーストは:Toast.makeText(getBaseContext(), "User's location retrieved using library for android M in btnRetryGpsEvents()", Toast.LENGTH_SHORT).show();が示されていないVIZました実行されないことを意味します!

どうしますか?何がここで間違っていますか?

お知らせください。

P .:この問題はAndroid M以上で発生しています。

+0

すぐ上のトーストはインターフェイスメソッド内にあります。私はそれがコールバックが到着したときにだけ呼び出されると信じています – Shaishav

+0

@シャイシャフあなたはどういう意味ですか?このコードは返却場所に時間がかかりますか?緯度と経度を取得する必要があることを確認するにはどうすればよいですか? –

+0

ええと...私はそのインターフェースを知らないので、どうすればそれを速くすることができるのかについてはコメントできません。ただし、コールバックが到着したときにのみ呼び出されることに注意してください。いずれにしてもそれを表示したい場合は、インターフェイスメソッドの外に置いてください(他の乾杯のように) – Shaishav

答えて

0

ReactiveLocationProviderのコードを確認してください。私はLocationListenerを実装していると思います。 getLastLocationが内部で呼び出されたと推測します。それは最後の場所が利用可能な場合にのみ場所を与えます。または、確認できるようにコードを入力してください。

+0

これは私が使っているライブラリです:https://github.com/mcharmas/Android-ReactiveLocation –

+0

私はMデバイスでうまく動作しています。テストしている特定のデバイスに問題があるか、最後に既知の場所がない可能性があります。このように設計されているため、場所をすぐに取得することはできない可能性があります。だからあなたのデザインを変更し、そのようなケースを処理します。 – Ramit

関連する問題