2015-08-07 34 views
5

Tôi đã cố gắng tích hợp API Google Địa điểm vào ứng dụng của mình, nhưng dường như không có API để khởi chạy. Mỗi lần tôi nhấp vào nút để khởi chạy API nó sẽ tải, sau đó trở lại màn hình chính. Tôi tin rằng tôi đã làm theo tất cả các bước trong tài liệu API, nhưng dường như dường như không tìm thấy vấn đề. Mã của tôi là như sau:Lỗi Google Địa điểm API sau khi khởi chạy

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

XML chính:

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

Tôi cũng đã chắc chắn để cho phép Google Places API dành cho Android trên các nhà phát triển giao diện điều khiển và tạo ra một API Key mà tôi đang lưu trữ các Manifest. Một chủ đề được đăng ở đây Google PlacePicker Closes Immediately After Launch có vẻ giống như một vấn đề tương tự với tôi, nhưng tôi đã thêm Khóa API của mình vào tệp kê khai của mình để vấn đề của tôi có vẻ khác.

Bất kỳ trợ giúp nào được đánh giá cao!

+1

Chắc chắn, cảm ơn! Tôi đã chỉnh sửa bài viết gốc để bao gồm đó và đăng nhập mới mèo – arim

+0

Haha Tôi biết đó là điều khó hiểu. Có vẻ như mục đích đang được khởi chạy thành công nhưng nó chỉ đóng một hoặc hai giây sau khi khởi chạy. – arim

+1

@arim bạn đã cập nhật mã ban đầu của mình dựa trên câu trả lời chưa? hoặc là mã ban đầu là lỗi đánh máy? Như thể đó là vấn đề, không nên cập nhật câu hỏi của bạn để giải quyết vấn đề. Điều đó có nghĩa là mọi người duyệt web không thể thấy tại sao bạn hỏi một câu hỏi. –

Trả lời

3

chỉnh sửa:

thay đổi siêu dữ liệu thẻ để

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

Và tham khảo quan trọng api của bạn như một nguồn lực chứ không phải là cứng mã hóa

chỉnh sửa:

Hãy cho phép của bạn bên ngoài thẻ ứng dụng của bạn .

lồng nhau như vậy:

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

Hãy thử thêm này để biểu hiện của bạn:

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

Đây là một hướng dẫn tốt đẹp:

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


Nhiệm vụ này ion Google Places API for Android Place Picker Does not work mô tả một vấn đề tương tự và nó là answer cho một hướng tốt về điều này.

đảm bảo bạn bật "API địa điểm cho Android" và không chỉ là "Địa điểm API" trong Developer Console. "API địa điểm cho Android" sẽ không hiển thị trong "API & Auth/APIs" vì nó không phải là API phổ biến (chưa). Bạn sẽ phải tìm kiếm bằng cách sử dụng hộp tìm kiếm API.

Hãy cho tôi biết nếu điều này giải quyết được vấn đề của bạn, nếu không chúng tôi có thể có giao diện khác.

+0

Cảm ơn bạn đã đăng bài! Thật không may, đây không phải là vấn đề. Tôi đã bật API Google Địa điểm cho Android API trong ứng dụng của mình. – arim

+0

hm ok, sẽ có giao diện khác .. (cảm thấy như thám tử) –

+0

Thêm quyền cho tệp kê khai của bạn hoặc đảm bảo tất cả quyền cần cho ứng dụng của bạn và dán thông điệp logcat nơi chương trình gây ra chỉ khi đó tôi sẽ cố khắc phục sự cố của bạn. –

Các vấn đề liên quan