不推荐使用Android API的地方

时间:2019-02-11 19:53:19

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

我正在尝试实施Places API。我的代码如下:

val builder = PlacePicker.IntentBuilder()
startActivityForResult(builder.build(mActivity), PLACE_PICKER_REQUEST)

我的地图凭据是正确的,但这次通话我得到了

Places API for Android does not seem to be enabled for your app. See https://developers.google.com/places/android/signup for more details.

但是,当我尝试启用“ Android的Places API”时,出现此错误。

  

您没有足够的权限来查看此页面。

我尝试注销帐户,然后以隐身模式,Safari和Chrome重新登录。什么都没用,所以我联系了支持人员,服务速度非常快(谢谢大家!)

  

尝试启用位置时收到错误的原因   Android API的功能已被弃用。地方功能   启用Places API即可覆盖android版。

我询问了实施情况,并得到了答复。

  

地点选择器也已弃用。您可以安装   兼容性库以继续使用位置选择器,直到   弃用期于7月29日结束。有关此的更多信息,请在此处红色:   https://developers.google.com/places/android-sdk/client-migration#place_picker

我现在在网上找到的文档有些混乱,哪些已弃用,哪些没有?谁能为我指出这种功能的正确方向?

5 个答案:

答案 0 :(得分:5)

已弃用Android版Google Places SDK,因此我们需要迁移 Places API 。 要使用新的Places API实施自动完成地点。,请按照以下步骤操作。

首先在开发人员控制台中启用PlacesAPI,然后通过在gradle中进行更新来安装客户端库。

(注意:您只能安装客户端库或    兼容性库,但不能同时使用)

implementation 'com.google.android.libraries.places:places:1.0.0'

现在在Oncreate()中初始化以下代码;

 // Add an import statement for the client library.
    import com.google.android.libraries.places.api.Places;

    // Initialize Places.
    Places.initialize(getApplicationContext(), "***YOUR API KEY***");

   // Create a new Places client instance.
   PlacesClient placesClient = Places.createClient(this);

新的PlacesAPI已初始化。.

对于自动完成的地方,请使用以下代码(您也可以使用自动完成片段)

// Set the fields to specify which types of place data to return.
List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME);
// Start the autocomplete intent.
Intent intent = new Autocomplete.IntentBuilder(
        AutocompleteActivityMode.FULLSCREEN, fields)
        .build(this);
startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Place place = Autocomplete.getPlaceFromIntent(data);
            Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
        } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
            // TODO: Handle the error.
            Status status = Autocomplete.getStatusFromIntent(data);
            Log.i(TAG, status.getStatusMessage());
        } else if (resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
        }
    }
}
  • 确保清单中的权限
  • 已生成API密钥。
  • 在开发控制台中启用了Places API。

删除(如果已添加)

implementation 'com.google.android.gms:play-services-places:16.0.0'

必需的头文件

import com.google.android.libraries.places.api.Places;
import com.google.android.libraries.places.api.model.Place;
import com.google.android.libraries.places.api.net.PlacesClient;
import com.google.android.libraries.places.widget.Autocomplete;
import com.google.android.libraries.places.widget.AutocompleteActivity;
import com.google.android.libraries.places.widget.model.AutocompleteActivityMode;

希望这会有所帮助。

答案 1 :(得分:1)

作为Google地点选择器的替代方法,您可以使用Leku。这是一个易于使用的库,可以满足您的需求。

您只需要添加依赖项:

{\"call_info_id\":18,\"call_id\":91389,\"user_id\":\"105bdbfb-d65a-42d3-ac79-c1e2575ed243\",\"call_arrive\":\"2020-04-03T21:51:24.797\",\"call_end\":\"2020-04-03T22:04:24.797\",\"info\":\"test\",\"AspNetUser\":null,\"Call\":null,\"StatusCode\":1}

在清单上声明活动:

dependencies {
    implementation 'com.schibstedspain.android:leku:7.0.0'
}

在需要的地方开始活动

<activity
    android:name="com.schibstedspain.leku.LocationPickerActivity"
    android:label="@string/leku_title_activity_location_picker"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    android:windowSoftInputMode="adjustPan"
    android:parentActivityName=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
        android:resource="@xml/leku_searchable" />
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

最后,处理结果:

val locationPickerIntent = LocationPickerActivity.Builder()
    .build(applicationContext)

startActivityForResult(locationPickerIntent, MAP_BUTTON_REQUEST_CODE)

你很好。 ;)

答案 2 :(得分:0)

按键可能需要一段时间才能开始工作。根据文档:

  

完全配置密钥最多可能需要5分钟。如果   密钥无法立即起作用,请在5分钟后重试。

https://developers.google.com/places/android-sdk/signup

答案 3 :(得分:0)

Android版Places SDK的Google Play服务版本(在Google Play服务16.0.0中)自2019年1月29日起已弃用,并将于2019年7月29日关闭。如果您在Google下查看API控制台,它只有PLACES API,再也没有像PLACES SDK FOR ANDROID这样的东西了。

可以找到here

到新地方SDK客户端库的迁移指南。

或者在我的仓库中找到自定义实现=> NewGooglePlacesSDK

答案 4 :(得分:0)

尽管Google为Places SDK提供了新的API,但由于新的结算政策,他们放弃了对Place Picker的支持,并且有两种解决方法。

  1. 您可以使用新的SDK自行实现此逻辑。

  2. 或者幸运的是,有一个Ping Place Picker库可以模仿 旧的位置选择器的行为。