ANDROID PLACE_PICKER(builder.build(上下文)

ANDROID PLACE_PICKER (builder.build(context)

基本上我正在尝试为 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 如果设备上当前的版本比您的应用所需的版本旧,则播放服务。

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

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

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 时,请确保 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();
    }
}

结果:

对于片段

           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();
            }