2016-08-23 100 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

使用以下內容,並確保你啓用了你添加後聽的按鈕 - –