使用Android

时间:2016-08-23 05:10:03

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

我想用位置字段保存用户表单信息。对于位置,我想在用户点击地图上的位置和填充后的位置到表单时,在某个按钮点击和位置上打开谷歌地图。

我找到了地方选择器作为相关解决方案,所以 我使用了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);
        }
    }
}

当前位置坐标不可见

Valid XHTML

点击SELECT THIS BUTTON后,打开下面的窗口,禁用选择按钮

Valid XHTML

请告诉我,如果还有其他最佳解决方案。 代码回复将非常有用或参考链接。

7 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

我遇到了同样的问题(请参阅原帖中的评论),原因是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。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

所有答案都是旧的或不相关的。我尝试了两种解决方案,对我有用。

解决方案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 Key
  3. 选择Android操作系统,输入包名称和SHA1
  4. 检查google-services.json(来自Firebase),它应该使用此密钥。
  5. 重建,一切运作良好。

答案 4 :(得分:0)

你应该使用这个

  <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>

答案 5 :(得分:0)

  1. 确保您已在console.developers.google.com
  2. 中启用此API
  3. 另外(这是我的情况)确保您的API密钥正确 - 从gradle applicationId字段复制包。如果您禁用API密钥的限制,那么测试将很好。

答案 6 :(得分:0)

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