其他分享
首页 > 其他分享> > ANDROID PLACE_PICKER(builder.build(上下文)

ANDROID PLACE_PICKER(builder.build(上下文)

作者:互联网

基本上,我正在尝试为Android实现PLACE_PICKER,并且在这里遇到了这个令人困惑的错误:

    int PLACE_PICKER_REQUEST = 1;
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
    Context context = getApplicationContext();
    startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);

错误即将出现在第4行:“(builder.build(context),”,我不知道为什么,我将其归类为错误:
未处理的异常:com.google.android.gms.common.GooglePlayServicesRepairableException,com.google.android.gms.common.GooglePlayServicesNotAvailableException.

多年来一直在解决这个问题…有什么帮助吗?

解决方法:

看来主要问题是您使用的是旧版Google Play服务.因此,为了使其适合您,您需要更新设备或仿真器上安装的Google Play服务的版本.

这也表明您没有任何代码可以检查设备上是否存在所需的版本,因此您绝对应该添加此代码,因为该领域的用户可能会遇到相同的问题.

如果设备上当前的版本比您的应用所需的版本旧,该框架提供了一种向用户添加提示以更新Google Play服务的简便方法.

这是我刚开始工作的一个简单示例.

首先,创建一个成员变量状态:

int status;

然后,在您的Activity的onCreate()中,检查Google Play服务是否可用.如果不是,则显示将提示用户升级的对话框:

    status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (status != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
            GooglePlayServicesUtil.getErrorDialog(status, this,
                    100).show();
        } 
    }

然后,当您想要显示PlacePicker时,请确保状态指示Google Play服务可用.如果不满足此条件,您可能还希望向用户提供一些指示(在此处添加其他内容)(另请注意额外的try / catch).

           if (status == ConnectionResult.SUCCESS) {
                int PLACE_PICKER_REQUEST = 199;
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                Context context = this;
                try {
                    startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
                } catch (GooglePlayServicesRepairableException e) {
                    e.printStackTrace();
                } catch (GooglePlayServicesNotAvailableException e) {
                    e.printStackTrace();
                }
            }

您还可以添加的一件事是,重新检查onActivityResult()中的状态,以查看用户是否已更新Google Play服务.
这也是从中获得PlacePicker对话框的结果的位置:

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 100){
        status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    }
    if (requestCode == 199){

        //process Intent......
        Place place = PlacePicker.getPlace(data, this);
        String toastMsg = String.format("Place: %s", place.getName());
        Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
    }
}

结果:

标签:android,google-places-api,google-maps
来源: https://codeday.me/bug/20191009/1881881.html