Java 来自ResultCallback的onResult()回调<;位置设置结果>;从来没有人打过电话

Java 来自ResultCallback的onResult()回调<;位置设置结果>;从来没有人打过电话,java,android,callback,google-play-services,android-location,Java,Android,Callback,Google Play Services,Android Location,在检索用户的位置之前,我试图检查用户的位置设置,但我无法获得要激发的onResult回调。我首先在onCreate()中初始化了GoogleClientApi对象并尝试调试,它在result.setResultCallback()断点处显示“没有这样的实例字段”。我在这上面花了很多时间,请帮帮我 public class MainActivity extendsAppCompatActivity implements,OnConnectionFailedListener{ private st

在检索用户的位置之前,我试图检查用户的位置设置,但我无法获得要激发的
onResult
回调。我首先在
onCreate()
中初始化了
GoogleClientApi
对象并尝试调试,它在
result.setResultCallback()
断点处显示“没有这样的实例字段”。我在这上面花了很多时间,请帮帮我

public class MainActivity extendsAppCompatActivity
implements,OnConnectionFailedListener{

private static final int PERMISSION_CODE = 23;
private static final int RESOLUTION_CODE = 0x1;
public GoogleApiClient googleClient;
TextView textView;

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

    textView = (TextView) findViewById(R.id.textView);

    checkLocationSettings();

}

public void checkLocationSettings() {

     googleClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addApi(LocationServices.API)
            .addOnConnectionFailedListener(this)
            .build();

    LocationSettingsRequest.Builder locationSettingsBuilder = new LocationSettingsRequest.Builder()
            .addLocationRequest(new LocationRequest().setInterval(5000)).setAlwaysShow(true);

    PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleClient
            , locationSettingsBuilder.build());

    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
            Status status = locationSettingsResult.getStatus();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    checkLocationPermission();
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    try {
                        status.startResolutionForResult(MainActivity.this, RESOLUTION_CODE);
                    } catch (IntentSender.SendIntentException e) {
                        e.printStackTrace();
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    Toast.makeText(MainActivity.this, "Location is missing", Toast.LENGTH_LONG).show();
            }

        }
    });

}

private void checkLocationPermission() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_CODE);
    } else {
        googleClient.connect();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case RESOLUTION_CODE:
            switch (resultCode) {
                case RESULT_OK:
                    checkLocationPermission();
                    break;
                case RESULT_CANCELED:
                    Toast.makeText(MainActivity.this, "Location is required, turn it on", Toast.LENGTH_SHORT).show();
                    break;
            }
            break;
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                googleClient.connect();
            } else {
                Toast.makeText(MainActivity.this, "Error Activty", Toast.LENGTH_LONG).show();
            }
    }
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != 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.
        return;
    }
    Location location = LocationServices.FusedLocationApi.getLastLocation(googleClient);
    textView.setText(location.getLatitude() + location.getLongitude() + "");
}

@Override
public void onConnectionSuspended(int i) {

}

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

}

@Override
protected void onStop() {
    super.onStop();
    if(googleClient.isConnected()){
        googleClient.disconnect();
        }
    }
}
public class main活动extendsAppCompative活动
实现,OnConnectionFailedListener{
私有静态最终int权限\ U代码=23;
私有静态最终整数分辨率_代码=0x1;
公共谷歌客户端谷歌客户端;
文本视图文本视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.textView);
checkLocationSettings();
}
公共无效checkLocationSettings(){
googleClient=新的GoogleAppClient.Builder(此)
.addConnectionCallbacks(此)
.addApi(LocationServices.API)
.addOnConnectionFailedListener(此)
.build();
LocationSettingsRequest.Builder locationSettingsBuilder=新建LocationSettingsRequest.Builder()
.addLocationRequest(new LocationRequest().setInterval(5000)).setAlwaysShow(true);
Pendingreult结果=LocationServices.SettingsApi.checkLocationSettings(谷歌客户端
,locationSettingsBuilder.build());
result.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(@NonNull LocationSettingsResult LocationSettingsResult){
Status Status=locationSettingsResult.getStatus();
开关(status.getStatusCode()){
案例位置设置StatusCodes.SUCCESS:
checkLocationPermission();
打破
案例位置设置StatusCodes.RESOLUTION_要求:
试一试{
status.startResolutionForResult(MainActivity.this,RESOLUTION_代码);
}catch(IntentSender.sendtintentexe){
e、 printStackTrace();
}
打破
案例位置设置StatusCodes.SETTINGS\u CHANGE\u不可用:
Toast.makeText(MainActivity.this,“位置丢失”,Toast.LENGTH_LONG.show();
}
}
});
}
私有void checkLocationPermission(){
if(ActivityCompat.checkSelfPermission(这是Manifest.permission.ACCESS\u位置)
!=PackageManager.权限(已授予){
ActivityCompat.requestPermissions(这是一个新字符串[]{Manifest.permission.ACCESS\u rough\u LOCATION},permission\u代码);
}否则{
googleClient.connect();
}
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
开关(请求代码){
案例解决方案代码:
开关(结果代码){
个案结果(正常):
checkLocationPermission();
打破
个案结果(已取消):
Toast.makeText(MainActivity.this,“位置是必需的,打开它”,Toast.LENGTH_SHORT.show();
打破
}
打破
}
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
开关(请求代码){
案例许可证代码:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
googleClient.connect();
}否则{
Toast.makeText(MainActivity.this,“Error activity”,Toast.LENGTH_LONG.show();
}
}
}
@凌驾
未连接的公共无效(@Nullable Bundle){
if(ActivityCompat.checkSelfPermission(此,Manifest.permission.ACCESS\u位置)!=PackageManager.permission\u已授予){
考虑到呼叫
//ActivityCompat#请求权限
//在此处请求缺少的权限,然后覆盖
//public void onRequestPermissionsResult(int-requestCode,字符串[]权限,
//int[]格兰特结果)
//处理用户授予权限的情况。请参阅文档
//对于ActivityCompat,请请求权限以获取更多详细信息。
返回;
}
Location Location=LocationServices.FusedLocationApi.getLastLocation(谷歌客户端);
textView.setText(location.getLatitude()+location.getLatitude()+);
}
@凌驾
公共空间连接暂停(int i){
}
@凌驾
public void onconnection失败(@NonNull ConnectionResult ConnectionResult){
}
@凌驾
受保护的void onStop(){
super.onStop();
if(googleClient.isConnected()){
googleClient.disconnect();
}
}
}

从这些SO线程,如果代码没有问题,请尝试重新启动Android Studio。可能是使用了以前版本中的错误文件。此线程:还可以帮助您连接到GoogleAppClient以获取用户的位置

谢谢你的回复。我尝试重新启动Android Studio,但没有成功@抛物线你找到解决办法了吗?我的回调也从未被调用。