2016-08-23 88 views
16

选择使用商家选择器谷歌API匿名位置的位置我想保存位置字段用户形式的信息。对于位置,我想打开谷歌地图上的一些按钮点击和位置选择当用户点击地图上的位置和后填充位置到表单中。禁用选择按钮,而在Android的

我发现的地方选择器的相关解决方案,所以 我已经使用地点选择器谷歌API和我能够打开谷歌地图,当我移动箭头以上首选位置,然后单击选择这个位置(亮相的黑色与现在显示在下面的坐标)

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

我想选择匿名的位置,并返回到主要活动:

确认框与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

上选择单击此按钮后,下面的窗口中选择按钮可以打开被禁用

Valid XHTML

请让我知道,如果有任何其他的最佳解决方案。 代码回复将很有帮助或参考链接。

+0

我得到了与目前如此热衷于寻找解决这个过同样的问题的用户。什么版本的Google Play服务安装? – DilbertDave

+0

我刚从我的手机中删除开发(调试)版本并从Play商店进行安装,然后复制了此文件。也许是API的关键问题? – DilbertDave

+0

我从此[文档](https://developers.google.com/places/android-api/placepicker#add)中检查时未发现您的代码存在任何错误。 **使用此位置的选择按钮?**弹出对话框始终启用,如[相关的SO问题]中所述(http://stackoverflow.com/questions/38930796/android-unable-pick-location-从就地选取器)。确保您的互联网连接没有问题。 – abielita

回答

2

我有同样的问题(请参阅原始帖子中的评论),结果是AndroidManifest.xml文件中的API密钥条目不匹配。

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

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

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

+0

实际上呢?如何更改发布配置? –

+0

@VikasPandey - 正如我提到的,我使用Xamarin和Visual Studio,所以这可能不适用于你。我有一个单独的GoogleMapsKey。包含两个MetaDataAttributes的cs文件,其中一个包含我的调试API密钥,另一个包含释放密钥。我用一个条件编译符号在它们之间切换,例如#if DEBUG。你可以在这里看到一个例子:https://github.com/adrianstevens/XamarinAndroidFlyoutMaps/blob/master/ActionBarMap/GoogleMapsKey.cs – DilbertDave

0

我面临同样的问题,当我在Google云计划中启用Google Places API for Android API时,问题就解决了。

+0

Google API for android已启用 –

+0

您必须同时启用Google Maps Android API和Google Android的地方API“。 –

+1

@LahiruChandima我已经启用了这两个API,但仍然无法正常工作。 – Aks4125

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. 谷歌API控制台
  2. 确定项目使用
  3. 01 Android的关键
  4. 选择Android操作系统,输入软件包名称和SHA1
  5. 检查google-services.json(来自Firebase),它应该使用此密钥。

重建,一切正常。

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> 
0
  1. 确保您已启用了console.developers.google.com
  2. 另外这个API(这是我的了情况)确保你的API密钥是正确的 - 从gradle applicationId域复制包。如果您禁用来自API密钥的限制,则会进行良好的测试。
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); 
    } 
+0

使用以下内容,并确保你启用了你添加后听的按钮 - –