Google Places API Crashes After Launch
Asked Answered
M

1

6

I have been trying to integrate Google Places API into my application, but cannot seem to get the API to launch. Every time I click the button to launch the API it will load, then revert back to the main screen. I believe I have followed all steps in the API documentation, but cannot seem to seem to find the issue. My code is as follows:

Java Class:

package lgalle19.developements.findplaces;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlacePicker;


public class PlacePickerActivity extends ActionBarActivity {
private static final int PLACE_PICKER_REQUEST = 1;
private TextView mViewName;
private TextView mViewAddress;
private TextView mViewAttributions;
private Button mPickerButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_place_picker);

    mViewName = (TextView) findViewById(R.id.textView);
    mViewAddress = (TextView) findViewById(R.id.textView2);
    mViewAttributions = (TextView) findViewById(R.id.textView3);
    mPickerButton = (Button) findViewById(R.id.pickerButton);
}

public void onPickButtonClick(View v) {
    // Construct an intent for the place picker
    try {
        PlacePicker.IntentBuilder intentBuilder =
                new PlacePicker.IntentBuilder();
        Intent intent = intentBuilder.build(this);
        // Start the intent by requesting a result,
        // identified by a request code.
        startActivityForResult(intent, PLACE_PICKER_REQUEST);

    } catch (Exception e){
        e.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode,
                                int resultCode, Intent data) {

    if (requestCode == PLACE_PICKER_REQUEST
            && resultCode == Activity.RESULT_OK) {

        // The user has selected a place. Extract the name and address.
        final Place place = PlacePicker.getPlace(data, this);

        final CharSequence name = place.getName();
        final CharSequence address = place.getAddress();
        String attributions = PlacePicker.getAttributions(data);
        if (attributions == null) {
            attributions = "";
        }

        mViewName.setText(name);
        mViewAddress.setText(address);
        mViewAttributions.setText(Html.fromHtml(attributions));

    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
}

Main XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".PlacePickerActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_marginTop="20dp"
    android:layout_centerHorizontal="true"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView2"
    android:layout_below="@+id/textView"
    android:layout_centerHorizontal="true"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Launch Places API Picker"
    android:id="@+id/pickerButton"
    android:layout_below="@+id/textView2"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="50dp"
    android:onClick="onPickButtonClick" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView3"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"/>

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView3"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:id="@+id/poweredBy"
    android:src="@drawable/powered_by_google_light"/>


</RelativeLayout>

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="lgalle19.developements.findplaces" >


<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-feature android:glEsVersion="0x00020000" android:required="true" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <activity
        android:name=".PlacePickerActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="MY API KEY"/>
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>
</application>

</manifest>

Gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "lgalle19.developements.findplaces"
    minSdkVersion 15
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.google.android.gms:play-services:7.5.0'
}

LogCat:

08-07 13:25:37.053  29527-29527/lgalle19.developements.findplaces E/Zygote﹕ MountEmulatedStorage()
08-07 13:25:37.053  29527-29527/lgalle19.developements.findplaces E/Zygote﹕ v2
08-07 13:25:37.053  29527-29527/lgalle19.developements.findplaces I/libpersona﹕ KNOX_SDCARD checking this for 10245
08-07 13:25:37.053  29527-29527/lgalle19.developements.findplaces I/libpersona﹕ KNOX_SDCARD not a persona
08-07 13:25:37.053  29527-29527/lgalle19.developements.findplaces I/SELinux﹕ Function: selinux_compare_spd_ram, SPD-policy is existed. and_ver=SEPF_SM-G920V_5.0.2 ver=27
08-07 13:25:37.063  29527-29527/lgalle19.developements.findplaces I/SELinux﹕ Function: selinux_compare_spd_ram , priority [1] , priority version is VE=SEPF_SM-G920V_5.0.2_0027
08-07 13:25:37.063  29527-29527/lgalle19.developements.findplaces E/SELinux﹕ [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
08-07 13:25:37.063  29527-29527/lgalle19.developements.findplaces I/art﹕ Late-enabling -Xcheck:jni
08-07 13:25:37.083  29527-29527/lgalle19.developements.findplaces D/TimaKeyStoreProvider﹕ TimaSignature is unavailable
08-07 13:25:37.083  29527-29527/lgalle19.developements.findplaces D/ActivityThread﹕ Added TimaKeyStore provider
08-07 13:25:37.153  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ Inside getClassLibPath + mLibMap{0=, 1=}
08-07 13:25:37.163  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ Inside getClassLibPath caller
08-07 13:25:37.203  29527-29527/lgalle19.developements.findplaces D/InjectionManager﹕ InjectionManager
08-07 13:25:37.203  29527-29527/lgalle19.developements.findplaces D/InjectionManager﹕ fillFeatureStoreMap lgalle19.developements.findplaces
08-07 13:25:37.213  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ Constructor lgalle19.developements.findplaces, Feature store :{}
08-07 13:25:37.213  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ featureStore :{}
08-07 13:25:37.273  29527-29527/lgalle19.developements.findplaces D/PhoneWindow﹕ *FMB* installDecor mIsFloating : false
08-07 13:25:37.273  29527-29527/lgalle19.developements.findplaces D/PhoneWindow﹕ *FMB* installDecor flags : -2139029248
08-07 13:25:37.333  29527-29527/lgalle19.developements.findplaces D/Activity﹕ performCreate Call Injection manager
08-07 13:25:37.333  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ dispatchOnViewCreated > Target : lgalle19.developements.findplaces.PlacePickerActivity isFragment :false
08-07 13:25:37.353  29527-29561/lgalle19.developements.findplaces D/OpenGLRenderer﹕ Render dirty regions requested: true
08-07 13:25:37.363  29527-29527/lgalle19.developements.findplaces D/PhoneWindow﹕ *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
08-07 13:25:37.363  29527-29527/lgalle19.developements.findplaces D/PhoneWindow﹕ *FMB* isFloatingMenuEnabled return false
08-07 13:25:37.473  29527-29561/lgalle19.developements.findplaces D/libEGL﹕ loaded /vendor/lib64/egl/libGLES_mali.so
08-07 13:25:37.513  29527-29561/lgalle19.developements.findplaces I/OpenGLRenderer﹕ Initialized EGL, version 1.4
08-07 13:25:37.523  29527-29561/lgalle19.developements.findplaces I/OpenGLRenderer﹕ HWUI protection enabled for context ,  &this =0x7fa4c75060 ,&mEglDisplay = 1 , &mEglConfig = -1529904464
08-07 13:25:37.523  29527-29561/lgalle19.developements.findplaces D/OpenGLRenderer﹕ Get maximum texture size. GL_MAX_TEXTURE_SIZE is 8192
08-07 13:25:37.523  29527-29561/lgalle19.developements.findplaces D/OpenGLRenderer﹕ Enabling debug mode 0
08-07 13:25:37.523  29527-29561/lgalle19.developements.findplaces D/mali_winsys﹕ new_window_surface returns 0x3000,  [1440x2560]-format:1
08-07 13:25:37.553  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ dispatchCreateOptionsMenu :lgalle19.developements.findplaces.PlacePickerActivity
08-07 13:25:37.553  29527-29527/lgalle19.developements.findplaces I/InjectionManager﹕ dispatchPrepareOptionsMenu :lgalle19.developements.findplaces.PlacePickerActivity
08-07 13:25:37.673  29527-29527/lgalle19.developements.findplaces I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@3d2a49fa time:246449518
08-07 13:25:42.163  29527-29527/lgalle19.developements.findplaces D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
08-07 13:25:42.813  29527-29561/lgalle19.developements.findplaces D/OpenGLRenderer﹕ endAllStagingAnimators on 0x7faaf61e00 (RippleDrawable) with handle 0x7f966ee140
08-07 13:25:46.713  29527-29561/lgalle19.developements.findplaces D/mali_winsys﹕ new_window_surface returns 0x3000,  [1440x2560]-format:1
08-07 13:25:46.813  29527-29527/lgalle19.developements.findplaces I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@3d2a49fa time:246458658

I have also been sure to enable Google Places API for Android on the developer console and create an API Key which I am storing the Manifest. A topic posted here Google PlacePicker Closes Immediately After Launch seems like a similar issue to mine, but I have already added my API Key to my manifest so my issue seems to be different.

Any help is greatly appreciated!

Monosyllabic answered 7/8, 2015 at 15:35 Comment(7)
Sure, thanks! I've edited the original post to include that and the new log catMonosyllabic
Haha I know that's the puzzling thing. It looks like the intent is being launched successfully but it just closes a second or two after launch.Monosyllabic
Yes, I updated the code based upon your feedback. I updated the code because the feedback did not completely solve the problem (although it got it closer!)Monosyllabic
@Heyyou If it helps, the application gets to the points to where it finds my location and then exits. The "places" section at the bottom of the screen is still loading when it exits. Also, unfortunately the code I have posted in the question are the only files I have made changes to while making the application. Also, I am using a Galaxy S6.Monosyllabic
@Heyyou No problem, and yes it is!Monosyllabic
@Heyyou Nope, my gradle is the same as the beginningMonosyllabic
@Heyyou As it turns out, (along with your original manifest edit) the API key can't be hardcoded - it needs to be referenced as a resource. Thanks you so much for your help!Monosyllabic
U
4

edit:

change metadata tag to

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

And reference your api key as a resource rather than hard coding

edit:

Take your permissions outside your application tag.

Nested like so:

<manifest .../>
    <permission .../>
    <uses-permission .../>
    <uses-feature .../>
        <application ...>
            <activity .../>
        </application>
</manifest>

Try adding this to your manifest:

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>

Here is a nice tutorial:

http://code.tutsplus.com/articles/google-play-services-using-the-places-api--cms-23715


This question Google Places API for Android Place Picker Does not work describes a similar problem and it's answer gives a good direction about this.

make sure you enable "Places API for Android" and not just "Places API" in the Developer Console. "Places API for Android" will not show up under "APIs & Auth/APIs" because it isnt a popular API (yet). You will have to search for it using the API search box.

Let me know if this solves your problem, if not we can have another look.

Upsetting answered 7/8, 2015 at 16:16 Comment(6)
Thank you for your post! Unfortunately, this was not the issue. I have already enabled the Google Places API for Android API in my application.Monosyllabic
Add permission your manifest or make sure all permission need for your application , and paste logcat message where show caused by only then i'll try to fix your problem .Dichotomous
Thank you both for your comments. I have updated the original question to incorporate your advice. The application opens the Google Places API now (actually shows the map) and then crashes. So the application gets one step further, but still reverts back to the original screen.Monosyllabic
I posted an updated logcat, I don't believe there are any changes.Monosyllabic
Are you running it on Emulator or Real Device?Heydon
You deserve a prize! Thanks, @YvetteColombBowen

© 2022 - 2024 — McMap. All rights reserved.