【问题标题】:Disable select button while selecting location of anonymous location using Place picker google API in android在 android 中使用 Place picker google API 选择匿名位置的位置时禁用选择按钮
【发布时间】:2016-08-23 05:10:02
【问题描述】:

我想用位置字段保存用户表单信息。对于位置,我想在单击某个按钮时打开谷歌地图,并在用户单击地图上的位置并将位置填写到表单中时选择位置。

我发现地点选择器是相关的解决方案,所以 我已经使用 Place Picker Google API 并且能够打开谷歌地图,当我将箭头移到首选位置并单击 选择此位置(出现黑色,现在坐标显示在该位置下)

确认框打开,有 2 个选项:

1.) 更改位置
2.) 选择(禁用模式)

我想选择匿名位置并返回主活动。

下面是我的代码:

private TextView get_place;
int PLACE_PICKER_REQUEST    =   1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    get_place   =   (TextView)findViewById(R.id.textView1);
    get_place.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PlacePicker.IntentBuilder builder   =   new PlacePicker.IntentBuilder();
            Intent intent;
            try {
                intent  =   builder.build(getApplicationContext());
                startActivityForResult(intent,PLACE_PICKER_REQUEST );
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            }
        }
    });
}

protected void onActivityResult( int requestCode , int resultCode , Intent data ){
    if( requestCode == PLACE_PICKER_REQUEST)
    {
        if(resultCode == RESULT_OK)
        {
            Place place =   PlacePicker.getPlace(data,this);
            Double latitude = place.getLatLng().latitude;
            Double longitude = place.getLatLng().longitude;
            String address = String.valueOf(latitude)+String.valueOf(longitude);
            get_place.setText(address);
        }
    }
}

当前位置坐标不可见

.

点击选择这个按钮后,下面的窗口打开,选择按钮被禁用

.

如果有其他最佳解决方案,请告诉我。 代码回复将很有帮助或参考链接。

【问题讨论】:

  • 我有一个用户现在也遇到了同样的问题,所以也很想找到解决方案。安装了哪个版本的 Google Play 服务?
  • 在从手机中删除开发(调试)版本并从 Play 商店安装后,我刚刚复制了这个。可能是 API 密钥问题?
  • 我从documentation 中检查时没有看到您的代码有任何错误。如related SO question 所述,Use this location? 弹出对话框的 SELECT 按钮始终处于启用状态。确保您的互联网连接没有问题。
  • @abielita - 就我而言,互联网连接不是问题。如果我使用调试密钥部署到我的设备,一切都会按预期工作。如果我使用发布密钥进行部署,那么我会得到上述行为,但地图在应用程序的其他部分显示得很好。
  • 我正在使用以下软件包 - 1.) com.android.support:appcompat-v7:24.2.0 2.) com.google .android.gms:play-services:8.3.0 3.) com.google.maps.android:android-maps-utils:0.3.4

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


【解决方案1】:

解决方案:从开发控制台启用Google Places API for Android

【讨论】:

    【解决方案2】:

    我遇到了同样的问题(请参阅原始帖子中的 cmets),结果证明是由 AndroidManifest.xml 文件中的 API 密钥条目不匹配引起的。

    我正在使用 Xamarin.Android,但 Java 中的原理应该相同 - 但您的里程可能会有所不同。

    基本上,我的应用程序使用的是 Maps API,在我的清单中,我将 API 密钥指定为 com.google.android.maps.v2.API_KEY - 一切正常。当我实现 Places Picker 时,我需要将密钥名称更改为 com.google.android.geo.API_KEY(我不必更改密钥本身!)。我为调试配置做了这个,但不是为发布配置做的——它仍然使用 Maps 键名。因此,构建一个可发布的包会产生一个满足 Maps API 但不满足 Places 的清单。

    更改发布配置已解决我的问题。

    【讨论】:

    • 你实际上做了什么?如何更改发布配置?
    • @VikasPandey - 正如我提到的,我使用的是 Xamarin 和 Visual Studio,所以这可能不适用于您。我有一个单独的 GoogleMapsKey.cs 文件,其中包含两个 MetaDataAttributes,一个包含我的调试 api 密钥,另一个包含发布密钥。我使用条件编译符号在它们之间切换,例如#如果调试。你可以在这里看到一个例子:github.com/adrianstevens/XamarinAndroidFlyoutMaps/blob/master/…
    【解决方案3】:

    我遇到了同样的问题,当我在我的谷歌云项目中启用谷歌 Places API for Android API 时,它得到了解决。

    【讨论】:

    • Google API for android 已启用
    • 您必须同时启用Google Maps Android APIGoogle Places API for Android
    • @LahiruChandima 我已经启用了这两个 API,但仍然无法正常工作。
    【解决方案4】:

    所有答案要么是旧的,要么是不相关的。我尝试了 2 个解决方案,对我有用。

    解决方案 1

    compile 'com.google.android.gms:play-services:9.4.0'
        compile 'com.google.android.gms:play-services-base:9.4.0'
        compile 'com.google.android.gms:play-services-appindexing:9.4.0'
        compile 'com.google.android.gms:play-services-contextmanager:9.4.0'
        compile 'com.google.android.gms:play-services-places:9.4.0'
        compile 'com.google.android.gms:play-services-nearby:9.4.0'
        compile 'com.google.android.gms:play-services-maps:9.4.0'
        compile 'com.google.android.gms:play-services-ads:9.4.0'
        compile 'com.google.android.gms:play-services-auth:9.4.0'
        compile 'com.google.android.gms:play-services-gcm:9.4.0'
        compile 'com.google.android.gms:play-services-analytics:9.4.0'
        compile 'com.google.android.gms:play-services-location:9.4.0'
    

    参考:googledocumentation

    解决方案 2

    1. Google API 控制台
    2. 确定项目正在使用的 Android 密钥
    3. 选择Android OS,输入包名和SHA1
    4. 检查 google-services.json(来自 Firebase),它应该使用此密钥。

    重建,一切正常。

    【讨论】:

      【解决方案5】:

      你应该使用这个

        <application>
        ...
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="YOUR_API_KEY"/>
      </application>
      

      而不是

      <application>
          <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="YOUR_API_KEY"/>
          <application>
      

      【讨论】:

        【解决方案6】:
        1. 确保您已在 console.developers.google.com 中启用此 API
        2. 另外(这是我的情况)确保您的 API 密钥正确 - 从 gradle applicationId 字段复制包。如果您禁用 API 密钥的限制,则可以进行很好的测试。

        【讨论】:

          【解决方案7】:
           protected void onActivityResult(int requestCode, int resultCode, Intent data) {
               if (requestCode==PLACE_PICKER_REQUEST|requestCode==REQUEST_CHECK_SETTING){
                     if(resultCode==RESULT_OK) {
                         mlocationUpdate = true;
          //               startLocationUpdate();
                         Place place = PlacePicker.getPlace(data, this);
          
          
                         String str_txt = place.getName().toString();
                         str_txt += "\n" + place.getAddress().toString();
                         placeMarkerOnMap(place.getLatLng());
          
                          mStringBuilder = new StringBuilder();
                         String mplacename = String.format("%s", place.getName());
                         mlatitude = (place.getLatLng().latitude);
          
                         mlongitude = (place.getLatLng().longitude);
                         String maddress = String.format("%s", place.getAddress());
          
                         mStringBuilder.append("NAME :");
                         mStringBuilder.append(mplacename);
                         mStringBuilder.append("\n");
          
                         Log.e("SRC-->",mplacename);
                         Log.e("THIS-->",maddress);
          
          
          
                         mStringBuilder.append("ADDRESS :");
                         mStringBuilder.append(maddress);
                       /*mStringBuilder.append("\n");*/
                          if (isPickUp==true){
                              edt_pickup.setText(mStringBuilder);
          
                              isPickUp=false;
                                              }
          
          else if (isDrop==true){
                              edt_drop.setText(mStringBuilder);
                              mlatitudeEnd = (place.getLatLng().latitude);
          
                              mlongitudeEND = (place.getLatLng().longitude);
                              isDrop=false;
                          }
          
                     }}
          
          
                  super.onActivityResult(requestCode, resultCode, data);
              }
          

          【讨论】:

          • 使用以下内容并确保您启用了您在添加后收听的按钮--
          【解决方案8】:

          我还必须启用地理编码 API。这些是我正在使用的 API:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-11
            • 1970-01-01
            • 2021-08-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多