java - 当用户单击确定时,onActivityResult 结果代码也为零
问题描述
目标:当用户打开应用程序并且 GPS 关闭时,必须显示一个对话框并要求他打开 GPS。
问题:传递给的结果代码onActivityResult
没有一致的值。我的意思是:当我运行应用程序并在警报对话框上快速单击“确定”resultCode
时,当我处于调试模式时为 0(就像我单击“取消”一样),我会更慢地单步执行代码并在警报上单击“确定”对话框, resultCode
变为-1(如预期)
问题:你能帮我找出代码中这个问题的根源吗?如何准确查看resultCode的赋值位置?
地图活动
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {
...
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Check if localization permission is granted
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
// Create location updates request
mLocationRequest = locationUpdate.createLocationRequest(mLocationRequest, INTERVAL_DURATION);
// Create location updates callback
mLocationCallback = locationUpdate.createLocationCallback(mLocationCallback,RSSIcolorHmap,db, getApplicationContext());
// If wifi is the active connection, enable settings to get location updates and start wifi signal scan
if(checkWifiConnection()){
ACTIVE_TECHNOLOGY = 3;
TextView connTypeTextView = findViewById(R.id.typetextView);
connTypeTextView.setText("WIFI");
// AsyncTask that loads Wifi signal area info on the map
new PopulateWifiAreaAsync(db, getApplicationContext(), mMap, RSSIcolorHmap).execute();
// Check if location settings are appropriated for the location request
locationUpdate.checkLocationSettings(mLocationRequest,REQUEST_CHECK_SETTINGS, mFusedLocationClient,mLocationCallback,mMap);
scanWifiSignal();
} else {
// TODO Another connectivity is being used, enable settings to get location updates, check which type of connectivity is and start appropriate signal scan
Toast.makeText(getApplicationContext(),"no wifi, esci", Toast.LENGTH_LONG).show();
//finish();
// Check if location settings are appropriated for the location request
locationUpdate.checkLocationSettings(mLocationRequest,REQUEST_CHECK_SETTINGS,mFusedLocationClient,mLocationCallback,mMap);
//Toast.makeText(getApplicationContext(),"no wifi, check tipo connessione attuale", Toast.LENGTH_LONG).show();
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_FINE_LOCATION);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
getParent();
// Check which request we're responding to
switch (requestCode){
case REQUEST_CHECK_SETTINGS:
switch (resultCode){
case MapsActivity.RESULT_OK:
// All required changes were successfully made.
locationUpdate.getLastKnownLocation(mFusedLocationClient);
locationUpdate.startLocationUpdates(mFusedLocationClient, mLocationCallback, mLocationRequest);
//setActiveConnectionTypeScan();
//Toast.makeText(getApplicationContext(), "at", Toast.LENGTH_LONG).show();
break;
case MapsActivity.RESULT_CANCELED:
Toast.makeText(getApplicationContext(), "This app requires location permission to be granted", Toast.LENGTH_LONG).show();
finish();
break;
default:
break;
}
break;
}
}
位置更新
public void checkLocationSettings(final LocationRequest mLocationRequest, final int REQUEST_CHECK_SETTINGS, final FusedLocationProviderClient mFusedLocationClient, final LocationCallback mLocationCallback, final GoogleMap mMap) {
//final Activity mapsActivity = (Activity) context;
// Get and check location services settings
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest)
.setAlwaysShow(true);
SettingsClient client = LocationServices.getSettingsClient(mapsActivity);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
task.addOnSuccessListener(mapsActivity, new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
// All location settings are satisfied. The client can initialize
// location requests here
LocationUpdate locationUpdate = new LocationUpdate(mapsActivity);
locationUpdate.getLastKnownLocation(mFusedLocationClient);
locationUpdate.startLocationUpdates(mFusedLocationClient, mLocationCallback, mLocationRequest);
// Determine which type of connectivity is being used
// setActiveConnectionTypeScan();
// Toast.makeText(getApplicationContext(),"setting ok", Toast.LENGTH_LONG).show();
}
});
task.addOnFailureListener(mapsActivity, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
// Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(mapsActivity,
REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
}
}
}
});
}
解决方案
推荐阅读
- javascript - 在函数中使用字符串作为参数名称?
- python-3.x - 从 https 站点下载文档错误:sslv3 警报握手失败
- c++ - 通过 C 中的偏移量调用函数
- google-provisioning-api - 如何获得 Provisioning API 的邀请?
- ios - 如何减少MKOverlay圈的厚度?
- xamarin.forms - Xamarin Forms - 指向可见的标签
- spring-integration - Spring集成:是否可以让发送者等到任务执行器队列/线程空闲。
- javascript - Phonegap Framework7后退按钮不起作用
- rx-java - 如何让 RetryWhen 重试抛出异常的流
- python - Selenium ChromeDriver 在 python3.5 ubuntu 中不起作用