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,但没有成功@抛物线你找到解决办法了吗?我的回调也从未被调用。