Подтвердить что ты не робот

Google PlacePicker закрывается сразу после запуска

Я разрабатываю приложение для Android и просматриваю Google Адреса для некоторых функций в приложении. Недавно Google выпустила функцию PlacePicker, которую я использую. Я следил за рекомендациями Google и инструкциями по быстрому началу работы с "Т". Функциональность работала потрясающе с трех часов назад, и теперь, когда я иду ее протестировать, она запускается, а затем сразу же закрывается без ошибок, возникающих в трассировке стека. Вот как я использую код:

Это фрагмент.

// The Location Selection from Google Place Picker
where.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            launchPlace();
        } catch (GooglePlayServicesNotAvailableException |  GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        }
    }
});

Это внутри фрагментов onCreateView.

Метод launchPlace() определяется следующим образом.

// Start Google Place Picker Code **************************************************************
public void launchPlace() throws GooglePlayServicesNotAvailableException,
        GooglePlayServicesRepairableException {
    PLACE_PICKER_REQUEST = 1;
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();

    Context context = getActivity().getApplicationContext();
    startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {

    String badLocation = "That location is not valid for this app, please select a valid location";

    if (requestCode == PLACE_PICKER_REQUEST) {
        if (resultCode == Activity.RESULT_OK) {
            place = PlacePicker.getPlace(data, getActivity().getApplicationContext());
            if (place.getPlaceTypes().contains(34)) {
                if (place.getPlaceTypes().contains(9) || place.getPlaceTypes().contains(15) ||
                        place.getPlaceTypes().contains(38) ||
                        place.getPlaceTypes().contains(67) ||
                        place.getPlaceTypes().contains(79)) {
                    where.setText(place.getName());
                    loc = true;
                } else {
                    Toast.makeText(getActivity().getApplicationContext(),
                            badLocation, Toast.LENGTH_LONG).show();
                    try {
                        launchPlace();
                    } catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

Этот код работал ранее (3 часа назад), а теперь нет. Вот что говорит LogCat: (Android Studio)

04-21 15:48:02.320    5045-5045/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 15:48:02.680    5045-5124/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa1a55600 (InsetDrawable) with handle 0xa185dff0
04-21 15:48:05.000    5045-5121/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 15:48:05.060    5045-5045/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:9757022

Если кто-нибудь знает способ помочь с этим, это будет потрясающе, я знаю, что Google PlacePicker является совершенно новым, но я начинающий разработчик Android и чувствую, что кто-то лучше понимает, чем я. Любая помощь будет оценили. Если требуется дополнительная информация, пожалуйста, дайте мне знать. Мы используем GitHub, поэтому я вернусь назад, когда он когда-то работал, но ничего не изменился, он все равно закрывается (сборщик, а не приложение). Я включил API Google Адресов и Google Places API для Android в консоли разработчика, и никакой помощи там не было. Он переходит на экран "Обновление вашего местоположения", затем останавливается.

EDIT: это весь LogCat, начиная с запуска (на Samsung Galaxy S5) до запуска PlacePicker (одна навигация до этого действия), затем закрывается и возвращается в приложение. Это то, что вы имели в виду?

04-21 16:56:26.740  27318-27318/com.siliconmindtech.trofi D/ResourcesManager﹕ creating new AssetManager and set to /data/app/com.siliconmindtech.trofi-1/base.apk
04-21 16:56:26.910  27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isShipBuild true
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Thread-13137-1066627414: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910  27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.940  27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call secproduct feature valuefalse
04-21 16:56:26.940  27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call debug elastic valuetrue
04-21 16:56:26.950  27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.970  27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Render dirty regions requested: true
04-21 16:56:27.030  27318-27350/com.siliconmindtech.trofi I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build:  ()
    OpenGL ES Shader Compiler Version: E031.25.01.03
    Build Date: 10/28/14 Tue
    Local Branch: LA.BF.1.1_RB1_20141028_021_patches2
    Remote Branch:
    Local Patches:
    Reconstruct Branch:
04-21 16:56:27.030  27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-21 16:56:27.050  27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ HWUI protection enabled for context ,  &this =0xa23090d8 ,&mEglDisplay = 1 , &mEglConfig = 8
04-21 16:56:27.050  27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Enabling debug mode 0
04-21 16:56:27.050  27318-27340/com.siliconmindtech.trofi I/System.out﹕ KnoxVpnUidStorageknoxVpnSupported API value returned is false
04-21 16:56:27.240  27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ Application requested CPU execution
04-21 16:56:27.260  27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ 0xa2377a00 Launching thread(s), CPUs 4
04-21 16:56:27.310  27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:13859270
04-21 16:56:29.700  27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.850  27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.970  27318-27318/com.siliconmindtech.trofi I/Places﹕ Got here!
04-21 16:56:32.300  27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa196d600 (InsetDrawable) with handle 0xaf7fc350
04-21 16:56:32.740  27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:13864703

Вышеупомянутый LogCat является Verbose.

Решение: не будьте новичком, как я, я забыл добавить свой ключ API Google в свой файл android_manifest.xml... Прошу прощения.

4b9b3361

Ответ 1

Просто включите API Google Адресов для Android в консоли разработчика Google.

Не забудьте указать свой ключ API в AndroidManifest:

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

Ответ 2

Я считаю, что, когда Google внес изменения в свой API на 04/20/2015, они изменили API мест, который использует PlacePicker. Решение, которое сработало для меня, выглядит следующим образом:

  • Перейдите в консоль разработчика Google (https://console.developers.google.com/project)
  • Перейдите к проекту, если вы его создали. Если не перейдите сюда: https://developers.google.com/console/help/
  • Перейдите к "API и auth", затем "Credentials" в левой части консоли. Мне не хватает репутации, чтобы опубликовать изображение для руководства...
  • Создайте новый ключ, это появится в разделе "Открытый API-интерфейс" в окне "Учетные данные". Для получения ключа вам понадобится ваш отпечаток SHA1. Направления, которые я использовал здесь: Как получить сертификат отпечатка SHA-1 в Android Studio для режима отладки?
  • Место, в которое вы вводите свой отпечаток SHA1, должно быть в таком формате: (Ваш ключ, 20 значений шестнадцатеричных значений, разделенных символом ":" ), com.yourpackage.yourapp
  • Скопируйте созданный ключ API. Вам нужно будет добавить отпечаток каждого разработчика в том же формате, что и для других разработчиков.
  • Добавьте свой ключ к вашему AndroidManifest.xml

<application ...

<meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_api_key" />

... </application>

Ответ 3

У меня такая же проблема. Я добавляю ключ карты Google

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>` in manifest file. 

The Place Picker немедленно закрывается. Тогда я также добавляю

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_api_key" />

Отображает Place Picker, но когда я открываю карту, мое приложение было принудительно закрыто и записывалось, как показано ниже.

RuntimeException: The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.android.maps.v2.API_KEY in the <application> element of AndroidManifest.xml
        at com.google.maps.api.android.lib6.d.fb.a(Unknown Source)
        at com.google.maps.api.android.lib6.a.g.a(Unknown Source)
        at com.google.android.gms.maps.internal.CreatorImpl.b(Unknown Source)
        at com.google.android.gms.maps.internal.CreatorImpl.b(Unknown Source)
        at com.google.android.gms.maps.internal.i.onTransact(SourceFile:62)
        at android.os.Binder.transact(Binder.java:364)
        at com.google.android.gms.maps.internal.zzc$zza$zza.zzj(Unknown Source)
        at com.google.android.gms.maps.SupportMapFragment$zzb.zzqs(Unknown Source)
        at com.google.android.gms.maps.SupportMapFragment$zzb.zza(Unknown Source)
        at com.google.android.gms.dynamic.zza.zza(Unknown Source)
        at com.google.android.gms.dynamic.zza.onCreate(Unknown Source)
        at com.google.android.gms.maps.SupportMapFragment.onCreate(Unknown Source)
        at android.support.v4.app.Fragment.performCreate(Fragment.java:1763)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
        at dalvik.system.NativeStart.main(Native Method)

Я пытаюсь удалить

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>` but keep `<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_api_key" />

И он работает хорошо, теперь, и я не знаю почему.

Ответ 4

замените тэг метаданных в mainfeast.. он работает для меня..

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YOUR ANDROID KEY" />

с

   <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR ANDROID KEY" />

удача

Ответ 5

У меня были те же проблемы с использованием API-интерфейсов Places. В конце концов, я понял, что существуют различные API Google Адресов, особенно для Android. Следовательно, API-ключ, который я использовал, был просто для версии, отличной от Android.

Создайте свой ключ, используя следующую ссылку: https://developers.google.com/places/android-api/signup

Ответ 6

Как я исправил эту ошибку при получении ключа API (на странице Google Developers Page), место, где вы вводите имя своего пакета, введите полное имя пакета. Это доступно в манифесте вашего андроида!