私はアプリを開発し、(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以上で発生しています。
すぐ上のトーストはインターフェイスメソッド内にあります。私はそれがコールバックが到着したときにだけ呼び出されると信じています – Shaishav
@シャイシャフあなたはどういう意味ですか?このコードは返却場所に時間がかかりますか?緯度と経度を取得する必要があることを確認するにはどうすればよいですか? –
ええと...私はそのインターフェースを知らないので、どうすればそれを速くすることができるのかについてはコメントできません。ただし、コールバックが到着したときにのみ呼び出されることに注意してください。いずれにしてもそれを表示したい場合は、インターフェイスメソッドの外に置いてください(他の乾杯のように) – Shaishav