ANDROID PLACE_PICKER(builder.build(context)

时间:2015-06-15 17:12:45

标签: android google-maps google-places-api

基本上我正在尝试为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。

多年来一直在努力...任何帮助?

2 个答案:

答案 0 :(得分:4)

看起来主要问题是您使用旧版Google Play服务。因此,为了让它适合您,您需要更新设备或模拟器上安装的Google Play服务版本。

这也表明您没有任何代码可以检查设备上是否存在所需的版本,这是您必须添加的内容,因为该字段中的用户可能会遇到同样的问题。

如果设备上当前版本的版本低于您的应用所需的版本,该框架可以为用户添加提示更新Google Play服务的简便方法。

这是一个我刚刚开始工作的简单例子。

首先,创建一个成员变量status

int status;

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

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

然后,当您想要展示PlacePicker时,请确保status表示Google Play服务可用。如果不满足此条件,您可能还想向用户提供一些指示(在此处添加else)(另请注意额外的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();
    }
}

结果:

enter image description here

答案 1 :(得分:0)

For Fragment

           try {
                int PLACE_PICKER_REQUEST = 1;
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
            }catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException ex){
                ex.printStackTrace();
            }