2015-08-07 16 views
5

Ho cercato di integrare l'API di Google Places nella mia applicazione, ma non riesco a ottenere l'avvio dell'API. Ogni volta che clicco sul pulsante per avviare l'API verrà caricato, quindi tornerà alla schermata principale. Credo di aver seguito tutti i passaggi della documentazione dell'API, ma sembra che non riesca a trovare il problema. Il mio codice è il seguente:L'API di Google Places si blocca dopo l'avvio

Java Classe:

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); 
    } 
} 
} 

XML principale:

<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> 

manifesto:

<?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: [email protected] 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: [email protected] time:246458658 

Sono stato anche sicuro di abilitare Google Places API per Android sulla console sviluppatore e creare una chiave API che sto Conservazione del Manifesto. Un argomento pubblicato qui Google PlacePicker Closes Immediately After Launch sembra un problema simile al mio, ma ho già aggiunto la mia chiave API al mio manifest, quindi il mio problema sembra essere diverso.

Qualsiasi aiuto è molto apprezzato!

+1

Certo, grazie! Ho modificato il post originale per includerlo e il nuovo log cat – arim

+0

Haha, so che è una cosa sconcertante. Sembra che l'intento sia stato lanciato con successo, ma si chiude solo una seconda o due dopo il lancio. – arim

+1

@arim hai aggiornato il codice originale in base alla risposta? o il codice originale era un refuso? Come se fosse il problema, non è una buona idea aggiornare la tua domanda per risolvere il problema. Significa che le persone che navigano non riescono a capire perché hai fatto una domanda. –

risposta

3

edit:

cambiamento dei metadati tag per

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

e riferimento vostra chiave API come una risorsa piuttosto che dura codifica

edit:

Prendere le autorizzazioni di fuori del tag applicazione .

nidificato in questo modo:

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

prova ad aggiungere questo al vostro manifesto:

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

Ecco un bel tutorial:

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


Questa ricerca Google Places API for Android Place Picker Does not work descrive un problema simile ed è answer fornisce una buona direzione su questo.

assicurati di abilitare "Places API per Android" e non solo "Luoghi API" nella Console per gli sviluppatori. "Places API per Android" non mostrerà sotto "API & Auth/API" perché non è ancora un'API popolare (ancora). È necessario cercarlo con la casella di ricerca API .

Fammi sapere se questo risolve il tuo problema, in caso contrario possiamo avere un altro aspetto.

+0

Grazie per il tuo post! Sfortunatamente, questo non era il problema. Ho già attivato l'API di Google Places per l'API Android nella mia applicazione. – arim

+0

ok, avrò un altro aspetto ... (mi sento un detective) –

+0

Aggiungi il tuo manifest o assicurati che tutte le autorizzazioni siano necessarie per la tua applicazione, e incolla il messaggio di logcat dove show causato da solo allora proverò a correggere il tuo problema. –

Problemi correlati