Android:当设备位置已经启用时,FusedLocationProviderClient不会调用onLocationResult()方法。
创始人
2024-10-13 11:00:39
0

要解决这个问题,可以通过以下代码示例来判断设备位置是否已启用,并在启用时调用onLocationResult()方法:

public class MainActivity extends AppCompatActivity {

    private FusedLocationProviderClient fusedLocationProviderClient;

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

        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

        checkLocationSettings();
    }

    private void checkLocationSettings() {
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(createLocationRequest());

        SettingsClient settingsClient = LocationServices.getSettingsClient(this);
        Task task = settingsClient.checkLocationSettings(builder.build());

        task.addOnSuccessListener(this, new OnSuccessListener() {
            @Override
            public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                // 设备位置已启用,可以开始获取位置信息
                startLocationUpdates();
            }
        });

        task.addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                if (e instanceof ResolvableApiException) {
                    try {
                        // 设备位置未启用,显示对话框提示用户打开位置设置
                        ResolvableApiException resolvable = (ResolvableApiException) e;
                        resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sendEx) {
                        // Ignore the error
                    }
                }
            }
        });
    }

    private void startLocationUpdates() {
        fusedLocationProviderClient.requestLocationUpdates(createLocationRequest(), new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                // 在此处理位置更新
            }
        }, null);
    }

    private LocationRequest createLocationRequest() {
        LocationRequest locationRequest = new LocationRequest();
        locationRequest.setInterval(10000);
        locationRequest.setFastestInterval(5000);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        return locationRequest;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CHECK_SETTINGS) {
            if (resultCode == RESULT_OK) {
                // 用户已打开位置设置,可以开始获取位置信息
                startLocationUpdates();
            }
        }
    }
}

在上面的代码中,首先通过checkLocationSettings()方法来检查设备位置设置。如果设备位置已启用,则直接调用startLocationUpdates()方法开始获取位置信息。如果设备位置未启用,则通过ResolvableApiException启动一个对话框,提示用户打开位置设置。用户在打开位置设置后,会触发onActivityResult()方法,然后再次调用startLocationUpdates()方法开始获取位置信息。

请注意,在startLocationUpdates()方法中,使用requestLocationUpdates()方法注册了一个LocationCallback对象,该对象中的onLocationResult()方法将在位置更新时被调用,您可以在该方法中处理位置信息。

相关内容

热门资讯

此事引发广泛关注!皮球茶馆辅助... 此事引发广泛关注!皮球茶馆辅助器,微乐小程序自建房辅助下载,手段教程(讲解有挂)-哔哩哔哩1、实时微...
透视好牌!德扑圈有透视吗,德普... 透视好牌!德扑圈有透视吗,德普辅助器怎么用(透视)原来真的有挂(有挂神器)-哔哩哔哩1、德普辅助器怎...
此事引发网友热议!河洛杠次插件... 您好,新珊瑚大厅辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家...
透视模拟器!德普之星的辅助工具... 透视模拟器!德普之星的辅助工具介绍,德普之星透视辅助软件激活码(透视)竟然存在有挂(有挂教学)-哔哩...
据玩家消息!雀神麻雀科技公司,... 据玩家消息!雀神麻雀科技公司,德普之星透视辅助软件,法子教程(有挂秘诀)-哔哩哔哩1、德普之星透视辅...
透视免费!德普之星的辅助工具介... 透视免费!德普之星的辅助工具介绍,德扑圈有透视吗(透视)一贯是有挂(有挂详细)-哔哩哔哩一、德普之星...
近日!决战十三水有挂脚本吗,a... 近日!决战十三水有挂脚本吗,aapoker发牌逻辑,指引教程(有挂规律)-哔哩哔哩1、下载好决战十三...
透视软件!德普之星透视辅助软件... 透视软件!德普之星透视辅助软件激活码,德普之星私人局透视(透视)好像是真的挂(有挂功能)-哔哩哔哩暗...
无独有偶!雀神麻雀充运势有用吗... 无独有偶!雀神麻雀充运势有用吗,极速官方游戏暗堡辅助器,学习教程(有挂秘籍)-哔哩哔哩1、极速官方游...
透视私人局!德普之星怎么开辅助... 透视私人局!德普之星怎么开辅助,德普之星透视软件免费入口官网(透视)都是是有挂(发现有挂)-哔哩哔哩...